Fabian St.: BCD-Kodierung?

Beitrag lesen

Hi Martin!

Nun bin ich dabei, mit Hilfe des ctypes-Python-Modul einen Python-Wrapper für diese Dll zur erstellen. Wenn ich die betreffene Funktion aufrufe bekomme ich einen Wert wie „17629184“. Wie bekomme ich nun daraus jedoch meine Versionsnummer?

Indem du diesen Integerwert in einzelne Bytes aufsplittest.
17629184 ist 0x010D0000, dann bekommst du also die Bytes 1,13,0,0. Ergibt das eine plausible Versionsnummer, vielleicht 1.13?

Vielen Dank für deine Erklärung! Das hilft mir schon mal sehr weiter. Jetzt habe ich jedoch noch eine Frage: Warum ist 0x01, 0x0D, etc. genau ein Byte, d.h. 8bit. Irgendwie hängt es bei mir bereits daran ...

Mein Problem fängt nämlich bereits damit an, dass ich auch nach eine Google-Recherche mit dem Begriff „BCD-Kodierung“ nicht wirklich weiterkomme.

Das ist hier auch irreführend, weil der Wert nicht wirklich BCD-codiert ist. Bei der BCD-Codierung wird jede Dezimalziffer exakt auf vier Bits abgebildet, die dann die Werte 0000..1001 annehmen können. Die weiteren, theoretisch möglichen Bitmuster 1010..1111 werden nicht verwendet. Der Vorteil der Methode ist, dass sich BCD-codierte Zahlen dann sehr leicht in Ausgabestrings umwandeln lassen: Einfach ein Nibble nach dem anderen nehmen, 0x30 addieren und als ASCII-Zeichen ausgeben.
Mit BCD-codierten Zahlen wirklich zu rechnen ist dagegen sehr aufwendig.

Ah, ok. Kein Wunder, dass mich das also nicht wirklich weiter gebracht hat.

Grüße,
Fabian St.