2015-11-02 2 views
0

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

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

В результате я пытаюсь получить шестнадцатеричный адрес преобразуется в небольшой Endian («<»). Редакцией: Эквивалент Perl (жаль, не знаю, Perl на печать в)

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

результат: 582422041

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

+0

Так какой результат вы ожидали, и что вы получили вместо этого? – jonrsharpe

+0

Можете ли вы объяснить, почему двоеточие является проблемой? Для чего вы используете выходную строку? Вы хотите строку длиной 4, содержащую четыре символа 'chr (0x3a)', 'chr (0xf2)', 'chr (0xd1)' и 'chr (0x01)', или вы хотите, чтобы строка длиной 16, выглядит как '\ x3a \ xf2 \ xd1 \ x01' при печати? (И если последнее, * почему??) Или что-то еще? –

+0

Эй, я только что редактировал мой вопрос. Я хочу, чтобы результат был таким: 582422041 –

ответ

1

Все вроде бы хорошо:

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

значащий байт 01 хранится на самом высоком адресе памяти, что дает мало Endian. Единственное, что я могу заметить, это то, что 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' 
+0

Проблема «:» - это проблема, мне нужно, чтобы шестнадцатеричные значения оставались шестнадцатеричными значениями и преобразовывались в ASCII. Подобно perl pack ('V',) метод –

+0

@Igalname обновил мое сообщение. – Vovanrock2002

Смежные вопросы