Какой формат я должен использовать в struct.unpack
для декодирования данных, упакованных в perl, используя символ w
(как говорит doc "BER сжатое целое число")?
Я не верю, что модуль struct python поддерживает этот формат, он в основном поддерживает только кодировки, которые обычно встречаются в C-структурах. Кодировки BER & DER обычно встречаются только в кодированных потоках ASN.1... в этом случае может оказаться полезным один из модулей Python ASN.1 (я должен отметить, что они не являются такими удобными для пользователя).
Если нет, возможно, вам придется реализовать декодер самостоятельно. Следующий бит кода будет считывать int и возвращать туда, где в строке, которую распаковывает, нужно забрать...
def decode_ber_int(data, offset):
value = 0
while True:
tmp = ord(data[offset])
value = (value<<7) | (tmp&0x7f)
offset += 1
if tmp & 0x80 == 0:
break
return value, offset
К сожалению, это, вероятно, потребует разбить ваш распакованный вызов на unpack, decode_ber_int и распаковать остальные.