Как я могу распаковать двоичные шестнадцатеричные отформатированные данные в Python?

Просто конвертируйте свою коллекцию в Json, как показано ниже,

$json = $analyticsData4->toJson();

Затем используйте этот пакет jsonq для суммирования / подсчета / размера / перемещения / поиска того, что вы хотите, довольно легко. [ 114]

Например,

$q = new Jsonq('data.json');
$res = $q->from('products')
->where('cat', '=', 1)
->sum('price');

Обратите внимание, что эта простая задача может показаться много работы, но, безусловно, она поможет вам в проекте.

6
задан DavidM 14 October 2008 в 11:08
поделиться

3 ответа

Существует простой способ сделать это с binascii модуль:

>>> import binascii
>>> print binascii.hexlify("ABCZ")
'4142435a'

Если я не неправильно понимаю что-то об упорядочивании откусывания (высокое откусывание сначала является значением по умолчанию), который должен быть совершенно достаточным!

Кроме того, Python hashlib.md5 объекты имеют a hexdigest() метод для автоматического преобразования обзора MD5 в ASCII преобразовывает строку в шестнадцатеричную систему, так, чтобы этот метод не был даже необходим для обзоров MD5. Надежда, которая помогает.

12
ответ дан 8 December 2019 в 03:02
поделиться

В Python Вы используете модуль структуры для этого.

>>> from struct import *
>>> pack('hhl', 1, 2, 3)
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')
8

HTH

8
ответ дан 8 December 2019 в 03:02
поделиться

Нет никакого соответствующего "шестнадцатеричного откусывания" кода для struct.pack, таким образом, необходимо будет или вручную упаковать в байты сначала, как:

hex_string = 'abcdef12'

hexdigits = [int(x, 16) for x in hex_string]
data = ''.join(struct.pack('B', (high <<4) + low) 
               for high, low in zip(hexdigits[::2], hexdigits[1::2]))

Или лучше, можно просто использовать шестнадцатеричный кодек. т.е.

>>> data = hex_string.decode('hex')
>>> data
'\xab\xcd\xef\x12'

Для распаковки можно закодировать результат назад для преобразовывания в шестнадцатеричную систему так же

>>> data.encode('hex')
'abcdef12'

Однако обратите внимание, что для Вашего примера, нет, вероятно, никакой потребности взять распространение в прямом и обратном направлениях через шестнадцатеричное представление вообще при кодировании. Просто используйте md5 двоичный обзор непосредственно. т.е.

>>> x = md5.md5('some string')
>>> x.digest()
'Z\xc7I\xfb\xee\xc96\x07\xfc(\xd6f\xbe\x85\xe7:'

Это эквивалентно Вашему пакету () представление редактора. Для получения шестнадцатеричного представления, использование то же распаковывают метод выше:

>>> x.digest().decode('hex')
'acbd18db4cc2f85cedef654fccc4a4d8'
>>> x.hexdigest()
'acbd18db4cc2f85cedef654fccc4a4d8'

[Править]: Обновленный для использования лучшего метода (преобразовывают кодек в шестнадцатеричную систему),

11
ответ дан 8 December 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: