PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 26 stelligen string aus 0 und 1 verkleinern, wie?



Accenter
25.02.2014, 11:21
ich sende einen funkcode aus um mit einem intertechnofunkempfänger zu kommunizieren (> 64 millionen möglichkeiten).
die ersten 26 stellen des strings bilden die id und bestehen aus 0 und 1.

beispiel: 01011101010010101011101010

da das schwerer zu handeln ist weil ich so nicht einfach und übersichtlich erkenne welche funkcodes ich bereits vergeben habe, würde ich da gerne eine nummerierung einbauen.

ein teil des strings kann fix immer den selben wert haben (ich werde ja nie 64 millionen funksteckdosen anlernen wollen :-) ) , der restliche teil soll nummeriert sein. 256 verschiedene möglichkeiten reichen für mein vorhaben mit ausreichender reserve aus. somit kann ich dann leichter erkennen, welche funkcodes ich anderen empfängern schon angelernt habe.

wie bekomme ich das mit bascom hin?

PICture
25.02.2014, 11:32
Hallo!

Binärzahlen lassen sich am kürzesten und einfach mit Hexadezimalen darstellen (vier Bits binär = 1 Zeichen Hex). Über BASCOM habe ich k.A.

witkatz
25.02.2014, 11:59
Ich würde auch Hex Darstellung empfehlen. Und wenn du mehr Stellen zur Verfügung hast als benötigt, kannst du sie benutzen um Ordnung und System in die Nummerierung einzuführen. Also z.B. erste Hex-Ziffer = Etage, zweite = Stromkreisnummer, oder Raumnummer, dritte bis letzte = laufende Nummerierung. Oder so ähnlich.

- - - Nachtrag 13:45 - - -
Der Vorteil von Hex ist, dass man die Zahl mit etwas Übung schnell hex<->bin im Kopf wandeln kann

seite5
25.02.2014, 12:17
hallo,
noch kleiner: eigenes Zahlensystem auf Basis aller verfügbaren Zeichen a..z,A..Z,0..9,#..?
mfg
Achim

oberallgeier
25.02.2014, 14:24
... funkcode ... > 64 millionen möglichkeiten ... 256 verschiedene möglichkeiten reichen ...
Vorschlag:

i) Vorne 6 Bits dazu
ii) Diese nun 32 Bits (= long integer) aufsplitten in zwei Words
iii) Das "vordere" Word aufsplitten in zwei Bytes
iv) Das zweite Byte des vorderen Words ist der eigentliche Schlüssel mit 255 Varianzen, der Rest vom Schlüssel bleibt konstant.
v) Fazit: die 256 Möglichkeiten sind eindeutig erkennbar und handhabbar.

Anmerkung: natürlich muss man den Schlüssel nicht da vorne nehmen, man kann die Aufsplitterei (und das Zusammenfügen) auch mit den letzten acht Bits machen. Ich würde aus Gründen des "Hackens von Aussen" aber das Byte mittendrin nehmen, Arbeit bzw. Aufwand bleiben im Prinzip gleich.

Durchführung etwa so mit Deinem
beispiel: 01011101010010101011101010
Die Punkte sind hier nur Platzhalter um das automatische Beschneiden von Leerstellen zu verhindern


Jetzt Auffüllen mit Nullen am MSB-Ende (ganz vorn):
beispiel: ..------0101110101 0010101011101010
Neuer Wert: 0000000101110101 0010101011101010
In 2 Word
Zerlegen: ..0000000101110101 0010101011101010
höherwertiges Word in 2 Bytes zerlegen
Ursprung: ..00000001 01110101 0010101011101010
Zerlegt: ...xxxxxxxx 01110101 xxxxxxxxxxxxxxxx

Dieses Byte ist Dein Schlüssel, die hier durch x repräsentierten Ziffern bleiben für alle Deine Schlüssel gleich. Bei Verwendung als Schlüssel werden nur die benötigten "unteren" 26 Bits genommen. UND für eine gute Übersicht ist das hier variante Byte als Dezimalziffer einfach darstellbar.

Warum das Ganze? Weil das Zerlegen und Zusammenfügen von Bytes (also 8 Bit in EINER Gruppe) zum Standard von Programmiersprachen gehört - - sagt einer, der keine Ahnung von BASCOM hat *ggg*.

https://www.roboternetz.de/community/threads/34560-2-Bytes-zu-word-zusammenfassen
http://www.mikrocontroller.net/topic/83140
http://www.rn-wissen.de/index.php/Bascom_Variablen#Long-Variablen

Accenter
25.02.2014, 15:27
ich hab jetzt einfach den string zerlegt und die ersten 8 stellen jeweils in 2 gruppen zu je 4 als bcd wert angegeben. danach steht eine 1 für "ein" oder eine 0 für "aus" senden. der restliche string ist immer der selbe. ich sende nun also nur noch z.b. " 01 16 1" so habe ich 16 x 16 möglichkeiten = 256.

kann nun mit meiner hausautomation also auch die günstigen intertechno empfänger bedienen nachdem die fs20 komponenten leider immer teurer werden. :-)

PICture
25.02.2014, 15:39
Gratulation ! :D

Du hast die einfachste für dich Kombination gewählt. Übrigens die 4-bittige Dezimalzahl kann sich "normaler" Mensch (also kein ASMan) besser als Hexzahl merken.