Python:将十六进制字符串转换为字节
我正在尝试制作字节帧,我将通过UDP发送。我有一个类Frame,它有属性sync,frameSize,data,checksum等。我使用十六进制字符串表示值。像这样:Python:将十六进制字符串转换为字节,python,string,udp,hex,bytearray,Python,String,Udp,Hex,Bytearray,我正在尝试制作字节帧,我将通过UDP发送。我有一个类Frame,它有属性sync,frameSize,data,checksum等。我使用十六进制字符串表示值。像这样: testFrame = Frame("AA01","0034","44853600","D43F") 现在,我需要将这些十六进制值连接在一起,然后像这样将它们转换成字节数组 def convertToBits(self): stringMessage = self.sync + self.frameSize + sel
testFrame = Frame("AA01","0034","44853600","D43F")
现在,我需要将这些十六进制值连接在一起,然后像这样将它们转换成字节数组
def convertToBits(self):
stringMessage = self.sync + self.frameSize + self.data + self.chk
return b16decode(self.stringMessage)
但当我打印转换后的值时,我得不到相同的值,或者我不知道如何正确读取python符号:
This is sync: AA01
This is frame size: 0034
This is data:44853600
This is checksum: D43F
b'\xaa\x01\x004D\x856\x00\xd4?'
因此,第一个单词被转换为ok(AA01->\xaa\x01),但(0034->\x004D)不一样。我尝试使用bytearray.fromhex,因为我可以在字节之间使用空格,但得到了相同的结果。您能帮我通过UDP发送相同的十六进制字吗?Python显示任何可以表示该字符的可打印ASCII字符的字节
4
与\x34
相同,但它选择在表示中打印ASCII字符
所以\x004
实际上与\x00\x34
相同,D\x856\x00
与\x44\x85\x36\x00
相同,\xd4?
与\xd4\x3f
相同,因为:
>>> b'\x34'
'4'
>>> b'\x44'
'D'
>>> b'\x36'
'6'
>>> b'\x3f'
'?'
这只是字节值的表示形式;该值完全正确,无需执行任何其他操作
如果有帮助,您可以再次使用以下方法将字节
值可视化为十六进制:
您将看到,
4
、D
、6
和?
再次由正确的十六进制字符表示。Python显示任何可以将可打印ASCII字符表示为该字符的字节4
与\x34
相同,但它选择在表示中打印ASCII字符
所以\x004
实际上与\x00\x34
相同,D\x856\x00
与\x44\x85\x36\x00
相同,\xd4?
与\xd4\x3f
相同,因为:
>>> b'\x34'
'4'
>>> b'\x44'
'D'
>>> b'\x36'
'6'
>>> b'\x3f'
'?'
这只是字节值的表示形式;该值完全正确,无需执行任何其他操作
如果有帮助,您可以再次使用以下方法将字节
值可视化为十六进制:
您将看到
4
、D
、6
和?
再次由正确的十六进制字符表示。字符串4D是\x34\x44,因此没有问题,您只是误读了输出字符串4D是\x34\x44,因此没有问题,您只是误读了输出