Problem bei hexadezimaler Berechnung

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
p5rawa
User
Beiträge: 3
Registriert: Donnerstag 4. September 2008, 12:27

Donnerstag 4. September 2008, 13:03

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

Donnerstag 4. September 2008, 13:09

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
p5rawa
User
Beiträge: 3
Registriert: Donnerstag 4. September 2008, 12:27

Donnerstag 4. September 2008, 13:25

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

Donnerstag 4. September 2008, 14:13

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'
p5rawa
User
Beiträge: 3
Registriert: Donnerstag 4. September 2008, 12:27

Donnerstag 4. September 2008, 16:07

Super! Hat mir echt weitergeholfen!

Danke!
Antworten