Seite 1 von 1

Problem bei hexadezimaler Berechnung

Verfasst: Donnerstag 4. September 2008, 13:03
von p5rawa
Hallo!

Ich habe ein Problem beim rechnen mit hexadezimalen Zahlen. Hintergrund ist die Berechnung einer Prüfsumme. Das Problem besteht nun darin, dass ich in Python leider keine Byte Variablen definieren kann oder nicht weiß wie man es macht (in C wäre das Short Integer).

Hier mein Problem: Ich habe einen Vector mit 10 Bytewerten.

can = [0x01,0x23,0x99,0x60,0x01,0x08,0x4C,0x01,0x00,0x8D]

Ich summiere nun die ersten 9 Bytes von links beginnend und subtrahiere das Ergebnis vom Byte 9 (hier 0x00) und schreibe das Ergebnis in Byte 10 (hier 0x8D). Das Ganze funktioniert ganz wunderbar mit 8 Bit Integer Arithmetik (geschlossener Zahlenraum). Bei normaler Integerarithmetik erhält man zum einen Überträge und auch die bitweise Subtraktion funktioniert da nicht.
Hat vielleicht jemand eine Idee wie man das bewerkstelligen kann?

Verfasst: Donnerstag 4. September 2008, 13:09
von rayo
Hi

Was ist bitweise Subtraktion? Meinst du eine AND/OR/XOR-Verknüpfung?

Bei der Addition einfach nacher noch (value & 0xFF) und schon hast du nur noch den 8Bit rest.

Gruss

Verfasst: Donnerstag 4. September 2008, 13:25
von p5rawa
Mit bitweiser Subtraktion meine ich folgendes:

Summe aller Bytes ist 0x173. Das mit 0xFF UND verknüpft lässt den Übertrag verschwinden (0x173 & 0XFF = 0x73). 0x00 - 0x73 müsste 0x8D ergeben bei einer 8 Bit Subtraktion und nicht -0x73!

Verfasst: Donnerstag 4. September 2008, 14:13
von BlackJack
Na da machst Du einfach wieder das gleiche: Die überzähligen Bits mit ``&`` abschneiden:

Code: Alles auswählen

In [134]: hex(-0x73 & 0xff)
Out[134]: '0x8d'

Verfasst: Donnerstag 4. September 2008, 16:07
von p5rawa
Super! Hat mir echt weitergeholfen!

Danke!