Perl 解包到 Python 转换
Perl unpack to Python Conversion
我正在努力将以下语句从 Perl 复制到 Python,但我不确定如何使用 python 结构模块执行。
所以我需要转换的代码是:
my $hex_string = "DEADBEEF";
my @bytes = map( hex, unpack("(A2)*", $hex_string ) );
以上相当于
my @bytes = ( 0xDE, 0xAD, 0xBE, 0xEF );
A2
似乎不是 Python 结构的好选择。谁能帮我解决这个问题?
您可以使用 int
和 base
参数将十六进制数字字符串转换为 int
:
>>> int('15', base=16)
21
>>> val = 15
>>> int(str(val), base=16)
21
更新
要使用struct.unpack
, first conver the hex_string
to binary data using binascii.unhexlify
(or binascii.a2b_hex
):
>>> import struct, binascii
>>> hex_string = "DEADBEEF"
>>> binascii.unhexlify(hex_string) # Hexa decimal -> binary data
'\xde\xad\xbe\xef'
>>> struct.unpack('4B', binascii.unhexlify(hex_string)) # 4 = 8 / 2
(222, 173, 190, 239)
>>> struct.unpack('4B', binascii.unhexlify(hex_string)) == (0xDE, 0xAD, 0xBE, 0xEF)
True
>>> struct.unpack('{}B'.format(len(hex_string) // 2), binascii.unhexlify(hex_string))
(222, 173, 190, 239)
我正在努力将以下语句从 Perl 复制到 Python,但我不确定如何使用 python 结构模块执行。
所以我需要转换的代码是:
my $hex_string = "DEADBEEF";
my @bytes = map( hex, unpack("(A2)*", $hex_string ) );
以上相当于
my @bytes = ( 0xDE, 0xAD, 0xBE, 0xEF );
A2
似乎不是 Python 结构的好选择。谁能帮我解决这个问题?
您可以使用 int
和 base
参数将十六进制数字字符串转换为 int
:
>>> int('15', base=16)
21
>>> val = 15
>>> int(str(val), base=16)
21
更新
要使用struct.unpack
, first conver the hex_string
to binary data using binascii.unhexlify
(or binascii.a2b_hex
):
>>> import struct, binascii
>>> hex_string = "DEADBEEF"
>>> binascii.unhexlify(hex_string) # Hexa decimal -> binary data
'\xde\xad\xbe\xef'
>>> struct.unpack('4B', binascii.unhexlify(hex_string)) # 4 = 8 / 2
(222, 173, 190, 239)
>>> struct.unpack('4B', binascii.unhexlify(hex_string)) == (0xDE, 0xAD, 0xBE, 0xEF)
True
>>> struct.unpack('{}B'.format(len(hex_string) // 2), binascii.unhexlify(hex_string))
(222, 173, 190, 239)