Hexzahl als String

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

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! :roll:

edit: kleiner Rechtschreibfehler
greetings
sebi
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Wo genau ist das Problem? Wieso geht das

Code: Alles auswählen

hex(0x90 + 0x06)
#oder
hex(144 + 6)
nicht?

Gruß,
Christian
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

mhhh vielleicht meint er

Code: Alles auswählen

0x90|0x06 == 0x96
0x82|0x02 == 0x82
also ne or-verknüpfung

Gruss
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Vielleicht meint er auch BCDs?
0x99 + 0x05 = 0x104

Also, antimicro, dein Input ist gefragt!
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

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?
greetings
sebi
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

ne jetzt bin ich komplett verwirrt :D
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
bis hierhin ok.
dann ist mein Ergebnis 0xC909, alles klar?
woher kommt 0x..09, von der ersten berechung?


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
gruss
BlackJack

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:

Code: Alles auswählen

def byte_sum(iterable):
  return sum(iterable) & 0xFF
antimicro
User
Beiträge: 151
Registriert: Sonntag 29. Februar 2004, 16:24

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.... :?
greetings
sebi
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

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.... :?
Ein Byte = 8 Bit = 2 Hexadezimalstellen.

Was du meintest, war 1 Hexadezimalstelle, also 4 Bits, die heißen Nibble (oder Nybble), nicht Byte!
Antworten