Python 将十六进制表示转换为字节对象
我是Python的初学者。 我有一个字符串是“544553543030303030303031”,长度是24。我想将其转换为长度为12的字节,如b'\x54\x45\x53\x54\x30\x30\x30\x30\x30\x31'。有人能帮我吗Python 将十六进制表示转换为字节对象,python,byte,Python,Byte,我是Python的初学者。 我有一个字符串是“544553543030303030303031”,长度是24。我想将其转换为长度为12的字节,如b'\x54\x45\x53\x54\x30\x30\x30\x30\x30\x31'。有人能帮我吗 hex_string2 = "TEST00000001" output = ''.join(hex(ord(c))[2:] for c in hex_string2) byte_data = bytes(output, 'ascii'
hex_string2 = "TEST00000001"
output = ''.join(hex(ord(c))[2:] for c in hex_string2)
byte_data = bytes(output, 'ascii')
print(byte_data) #/ b'544553543030303030303031'
print(len(byte_data)) #24
它应该是12个字节,而不是24个。一个字节就是一个字节,不管架构如何。 就我无法重现您的问题而言,我看到了:
>>> hex_string2 = "TEST00000001"
>>> byte_data = bytes(hex_string2, 'ascii')
>>> print(byte_data) #/ b'544553543030303030303031'
b'TEST00000001'
>>> print(len(byte_data)) #24
12
如上所述,一切正常。
在您的原始帖子中,您是否有一个不同的变量,您正在引用和设置之前的变量(即变量输出)
因为如果你这样做:
>>> hex_string2.encode("hex")
'544553543030303030303031'
现在如果你想要一个两位小数的列表,那么
>>> [this.encode("hex") for this in byte_data]
['54', '45', '53', '54', '30', '30', '30', '30', '30', '30', '30', '31']
这是您试图获取的内容吗?要在Python中将字符串转换为字节,请直接在字符串上使用
bytes
。不要在字符上调用ord
或hex
:
hex_string2 = "TEST00000001"
byte_data = bytes(hex_string2, 'ascii')
print(len(byte_data))
# 12
并且输出确实与b'\x54\x45\x53\x54\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31'
相同:
byte_data == b'\x54\x45\x53\x54\x30\x30\x30\x30\x30\x30\x30\x31'
# True
相反,如果您的输入是填充十六进制表示形式的字节字符串,则需要对该表示形式进行解码(例如,使用
binascii
):
或编解码器
:
import codecs
codecs.decode('544553543030303030303031', 'hex')
# b'TEST00000001'
展示你的尝试。这里有一组明显的字符对-所以用它来解决问题。@aneroid我编辑了这篇文章。什么是
hex\u string2
?您使用了输出
,但未指定其初始值。@很抱歉,我在复制代码时出错了。现在修复你的问题说我有一个字符串是“544553543030303033031”
,然后你把hex\u string2=“TEST00000001”
放在代码中:-/这不再起作用了:str.decode('hex')
仅是Python 2。是的,没错,我在前面的示例中测试了这两种行为,并在python2上留下了提示,但是上面提到的(即使用bytes())的一般想法是正确的。我将编辑回复以反映版本。
import binascii
binascii.unhexlify(b'544553543030303030303031')
# b'TEST00000001'
import codecs
codecs.decode('544553543030303030303031', 'hex')
# b'TEST00000001'