Получение неожиданного результата при использовании метода Python struct.pack

Когда я использую метод struct.pack в Python, я получаю странный результат. Код выглядит так:

>>> struct.pack('<i', 0x01d1f23a)

В результате я пытаюсь получить шестнадцатеричный адрес, преобразованный в little-endian ("<"). Отредактировано: эквивалентно Perl (извините за печатные издания, не знаю Perl)

#!/usr/bin/perl
my $eip = pack('V',0x01ccf23a); 
print "$eip[0]";
print "$eip[1]";
print "$eip[2]";
print "$eip[3]";

результат: 582422041

Мне нужно добиться того же результата с Python.

1 ответ

Вроде все нормально

>>> struct.pack('<i', 0x01d1f23a)
b':\xf2\xd1\x01'

Самый значимый байт 01 хранится по самому высокому адресу в памяти, таким образом, оставляя немного порядка байтов Единственное, что я могу заметить, это то, что b'\x3a' похоже : потому что это действительный символ ASCII.

Если ответ не решает вашу проблему, пожалуйста, обновите ваше сообщение с деталями.

редактировать

Чтобы число представлялось в виде последовательности байтов в шестнадцатеричной форме без преобразования в ASCII, используйте следующую строку:

>>> ' '.join(hex(b) for b in struct.pack('<i', 0x01d1f23a))
'0x3a 0xf2 0xd1 0x1'

использование str вместо hex чтобы получить десятичное представление.

>>> ' '.join(str(b) for b in struct.pack('<i', 0x01d1f23a))
'58 242 209 1'
Другие вопросы по тегам