Hi,
hat einer eine Antwort auf folgendes Problemchen?
Um eine Prüfsumme zu berechnen muss ich mehrere Zahlen (Hex) byteweise addieren. Die Hexzahlen habe ich allerdings als Integer. Was mit byteweise Addition gemeint ist kann ich am besten anhand eines Beispiels erklären:
0x90 und 0x06 => 0x96
jetzt möchte ich die Zahlen von 0x90 in "0x90" (Integer -> String) umwandeln um dann die einzelnen Stellen zu addieren. Hat da jemand eine Idee oder gibts da was Eleganteres?
Dank im Voraus!
edit: kleiner Rechtschreibfehler
Hexzahl als String
Wo genau ist das Problem? Wieso geht das
nicht?
Gruß,
Christian
Code: Alles auswählen
hex(0x90 + 0x06)
#oder
hex(144 + 6)
Gruß,
Christian
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
mhhh vielleicht meint er
also ne or-verknüpfung
Gruss
Code: Alles auswählen
0x90|0x06 == 0x96
0x82|0x02 == 0x82
Gruss
Hm, kann natürlich auch sein - aber auch dafür muß man nicht in einen String umwandeln. Also, antimicro, kannst Du uns vielleicht noch auf die Sprünge helfen? Oder hat rayo gut geraten?
Gruß,
Christian
Gruß,
Christian
Eigentlich ganz einfach...
die Zahlen 0x54 und 0x43 und 0x32 möchte ich 'byteweise addieren'.
0x54
0x43
0x32
dann zähle ich 0x4+0x3+0x2 = 0x9
und zum Schluss 0x9 + 0x50 + 0x40 + 0x30 = C9
dann ist mein Ergebnis 0xC909, alles klar?
die Zahlen 0x54 und 0x43 und 0x32 möchte ich 'byteweise addieren'.
0x54
0x43
0x32
dann zähle ich 0x4+0x3+0x2 = 0x9
und zum Schluss 0x9 + 0x50 + 0x40 + 0x30 = C9
dann ist mein Ergebnis 0xC909, alles klar?
greetings
sebi
sebi
-
- User
- Beiträge: 773
- Registriert: Mittwoch 5. November 2003, 18:06
- Wohnort: Schweiz
- Kontaktdaten:
ne jetzt bin ich komplett verwirrt
so wäre die berechnung, aber ich seh keinen sinn dahinter.
gruss
bis hierhin ok.die Zahlen 0x54 und 0x43 und 0x32 möchte ich 'byteweise addieren'.
0x54
0x43
0x32
dann zähle ich 0x4+0x3+0x2 = 0x9
und zum Schluss 0x9 + 0x50 + 0x40 + 0x30 = C9
woher kommt 0x..09, von der ersten berechung?dann ist mein Ergebnis 0xC909, alles klar?
so wäre die berechnung, aber ich seh keinen sinn dahinter.
Code: Alles auswählen
tmp = 0x54+0x43+0x32
erstes = tmp&0x0F
zeites = tmp
resultat = (zweites<<8)+erstes
Vielleicht hilft folgendes: Hex-, Dezimal und römische Zahlen sind einfach nur Darstellungen von ganzen Zahlen. Ob Du die Zahlen als Hex, Dezimal oder römisch hinschreibst und addierst ändert nichts am Ergebnis.
Wenn das Ergebnis einfach nur die Summe aller Zahlen auf ein Byte, also einen Wert zwischen 0 und 255 beschränt, sein soll, dann tut's folgendes:
Wenn das Ergebnis einfach nur die Summe aller Zahlen auf ein Byte, also einen Wert zwischen 0 und 255 beschränt, sein soll, dann tut's folgendes:
Code: Alles auswählen
def byte_sum(iterable):
return sum(iterable) & 0xFF
Hi,
das von rayo is es. Verstanden hab ich es zwar noch nicht, aber es funktioniert vielen dank.
Das ist für eine 16bit Prüfsumme. Ich verstehe das auch noch nicht warum da nicht z.B. CRC16 benutzt wird. Ach ja....
das von rayo is es. Verstanden hab ich es zwar noch nicht, aber es funktioniert vielen dank.
Das ist für eine 16bit Prüfsumme. Ich verstehe das auch noch nicht warum da nicht z.B. CRC16 benutzt wird. Ach ja....
greetings
sebi
sebi
Ein Byte = 8 Bit = 2 Hexadezimalstellen.antimicro hat geschrieben:Hi,
das von rayo is es. Verstanden hab ich es zwar noch nicht, aber es funktioniert vielen dank.
Das ist für eine 16bit Prüfsumme. Ich verstehe das auch noch nicht warum da nicht z.B. CRC16 benutzt wird. Ach ja....
Was du meintest, war 1 Hexadezimalstelle, also 4 Bits, die heißen Nibble (oder Nybble), nicht Byte!