Python-эквивалент формата упаковки Perl 'w'

1

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

Теги:
struct

1 ответ

3
Лучший ответ

Я не верю, что модуль 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 и распаковать остальные.

  • 0
    Спасибо за ответ и особенно за пример кода!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню