Der Martin: BCD-Kodierung?

Beitrag lesen

Hallo Fabian,

Ich habe hier eine in C geschriebene dll, [...] die laut Dokumentationen „eine Integervariable zurückgibt, bei der jedes Byte eine Stelle der Versionsnummer ist (ähnlich BCD-Kodierung).“

aha. Soweit klar.

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?

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.

So long,
 Martin

--
Es gibt Tage, da gelingt einem einfach alles.
Aber das ist kein Grund zur Sorge; das geht vorbei.