>>> import binascii, struct
>>> foo_hex = 'b1e92555'
>>> foo_bin = binascii.unhexlify(foo_hex)
>>> int(foo_hex, 16)
2984846677
>>> struct.unpack('i', foo_bin)[0]
1428548017
Почему эти целые числа разные? Какой метод правильный и как можно изменить другой, чтобы он был правильным?
1 ответ
struct
интерпретирует значение, используя прямой порядок байтов, тогда как использование unhexlify
и int(.., 16)
интерпретирует его как целое число без знака с прямым порядком байтов.
Используйте <
или >
, чтобы указать порядок байтов вашего ввода, и используйте I
, чтобы интерпретировать его как знаковое int:
>>> struct.unpack('>I', foo_bin)[0]
2984846677
>>> struct.unpack('<I', foo_bin)[0]
1428548017
См. Раздел Порядок байтов, размер и выравнивание a> на странице документации struct
.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.