Python-эквивалент формата упаковки Perl 'w' - PullRequest
1 голос
/ 21 июля 2011

Какой формат мне следует использовать в struct.unpack для декодирования данных, упакованных в perl, с использованием символа формата w (как в документе написано "BER сжатое целое число")?

1 Ответ

3 голосов
/ 21 июля 2011

Я не верю, что структурный модуль python поддерживает этот формат, он в основном поддерживает только те кодировки, которые обычно встречаются в структурах Си. Кодировки 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 и распаковать остальные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...