Python, как декодировать двоично-десятичный код (BCD)

Описание бинарного поля:

Caller number, expressed with compressed BCD code, and the surplus bits are filled with “0xF”

Я попытался напечатать в формате структуры '16c'и получил:('3', '\x00', '\x02', '\x05', '\x15', '\x13', 'G', 'O', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff')и если я использую '16b', я получаю (51, 0, 2, 5, 21, 19, 71, 79, -1, -1, -1, -1, -1, -1, -1, -1). И это неправильно, я должен получить номер телефона, а номера выше недействительны.

print struct.unpack_from('>16b', str(data.read()),offset=46)

Выше приведен код, который не работал, и я получаю недопустимые числа. В каком формате я должен распаковать это 16-байтовое поле и как преобразовать код BCD?

9
задан Martijn Pieters 26 July 2012 в 12:30
поделиться