Получение неожиданного результата при использовании метода 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'