Python 将包含十六进制的字符串转换为实际的十六进制
Python convert a string containing hex to actual hex
我有一个十六进制字符串,但我需要将其转换为实际 十六进制 .
例如,我有这个 hex string:
3f4800003f480000
我实现目标的一种方法是使用转义序列:
print("\x3f\x48\x00\x00\x3f\x48\x00\x00")
但是,我不能这样做,因为我想从多个变量一起创建我的十六进制。
我的程序的目的是:
- 例如取一个数字
100
- 乘以
100
:100 * 100 = 10000
- 将其转换为十六进制
2710
- 添加
0000
- 再次添加
2710
- 再次添加
0000
结果 我预计是 2710000027100000
。现在我需要将这个十六进制数作为参数传递给一个函数(作为十六进制)。
在Python中,没有像'hex'那样的独立类型。它将数字的十六进制表示法表示为str
。您可以将 type
yourself by calling it on hex()
检查为:
# v convert integer to hex
>>> type(hex(123))
<type 'str'>
但是为了将值表示为十六进制,Python 将 0x
添加到表示 十六进制 数字的字符串前面。例如:
>>> hex(123)
'0x7b'
因此,在您的情况下,为了将您的字符串显示为等效的十六进制,您只需在其前面添加“0x”,如:
>>> my_hex = "0x" + "3f4800003f480000"
这样,如果您稍后可能想将其转换为其他一些表示法,假设是整数 (根据您的问题陈述的性质,您肯定需要) ,您需要做的就是用 base 16 调用 int
as:
>>> int("0x3f4800003f480000", base=16)
4559894623774310400
其实Python的解释器是够聪明的。如果你甚至不在前面加上“0x”,它会处理它。例如:
>>> int("3f4800003f480000", base=16)
4559894623774310400
"0x" 表示字符串是十六进制字符串,以防有人 looking/debugging 您的代码(将来),他们会明白的。这就是为什么它是首选。
所以我的建议是坚持使用 Python 的十六进制样式,不要将其转换为转义字符,如“\x3f\x48\x00\x00\x3f\x48\x00\x00”。 =46=]
Convert an integer number to a lowercase hexadecimal string prefixed with “0x”. If x is not a Python int object, it has to define an index() method that returns an integer.
尝试binascii.unhexlify
:
Return the binary data represented by the hexadecimal string hexstr.
示例:
assert binascii.unhexlify('3f4800003f480000') == b"\x3f\x48\x00\x00\x3f\x48\x00\x00"
>>> hex(int('3f4800003f480000', 16))
'0x3f4800003f480000'
我有一个十六进制字符串,但我需要将其转换为实际 十六进制 . 例如,我有这个 hex string:
3f4800003f480000
我实现目标的一种方法是使用转义序列:
print("\x3f\x48\x00\x00\x3f\x48\x00\x00")
但是,我不能这样做,因为我想从多个变量一起创建我的十六进制。
我的程序的目的是:
- 例如取一个数字
100
- 乘以
100
:100 * 100 = 10000
- 将其转换为十六进制
2710
- 添加
0000
- 再次添加
2710
- 再次添加
0000
结果 我预计是 2710000027100000
。现在我需要将这个十六进制数作为参数传递给一个函数(作为十六进制)。
在Python中,没有像'hex'那样的独立类型。它将数字的十六进制表示法表示为str
。您可以将 type
yourself by calling it on hex()
检查为:
# v convert integer to hex
>>> type(hex(123))
<type 'str'>
但是为了将值表示为十六进制,Python 将 0x
添加到表示 十六进制 数字的字符串前面。例如:
>>> hex(123)
'0x7b'
因此,在您的情况下,为了将您的字符串显示为等效的十六进制,您只需在其前面添加“0x”,如:
>>> my_hex = "0x" + "3f4800003f480000"
这样,如果您稍后可能想将其转换为其他一些表示法,假设是整数 (根据您的问题陈述的性质,您肯定需要) ,您需要做的就是用 base 16 调用 int
as:
>>> int("0x3f4800003f480000", base=16)
4559894623774310400
其实Python的解释器是够聪明的。如果你甚至不在前面加上“0x”,它会处理它。例如:
>>> int("3f4800003f480000", base=16)
4559894623774310400
"0x" 表示字符串是十六进制字符串,以防有人 looking/debugging 您的代码(将来),他们会明白的。这就是为什么它是首选。
所以我的建议是坚持使用 Python 的十六进制样式,不要将其转换为转义字符,如“\x3f\x48\x00\x00\x3f\x48\x00\x00”。 =46=]
Convert an integer number to a lowercase hexadecimal string prefixed with “0x”. If x is not a Python int object, it has to define an index() method that returns an integer.
尝试binascii.unhexlify
:
Return the binary data represented by the hexadecimal string hexstr.
示例:
assert binascii.unhexlify('3f4800003f480000') == b"\x3f\x48\x00\x00\x3f\x48\x00\x00"
>>> hex(int('3f4800003f480000', 16))
'0x3f4800003f480000'