Python包字符串作为ascii十六进制值
我对struct模块和pack方法有一个问题(可能是理解上的问题)。我需要打包一条信息以便与传感器通信。此消息的一个值是整数的ascii表示(在本例中为“0”和“3”),即48和51。传感器仅接受十六进制值(在本例中为30和33)。但当我使用Python包字符串作为ascii十六进制值,python,struct,pack,Python,Struct,Pack,我对struct模块和pack方法有一个问题(可能是理解上的问题)。我需要打包一条信息以便与传感器通信。此消息的一个值是整数的ascii表示(在本例中为“0”和“3”),即48和51。传感器仅接受十六进制值(在本例中为30和33)。但当我使用pack('BB',48,51)时,它会返回'\x0003',但我需要'\x30\x33'。有没有办法将这两个字符转换为“十六进制二进制文件”'\x30\x33'与'03' >>> import struct >>> pr
pack('BB',48,51)
时,它会返回'\x0003',但我需要'\x30\x33'。有没有办法将这两个字符转换为“十六进制二进制文件”'\x30\x33'
与'03'
>>> import struct
>>> print struct.pack('BB', 48, 51)
03
>>> print '\x30\x33'
03
>>> '\x30\x33' == '03'
True
'\x30\x33'
和'03'
是同一事物的不同表示形式。'\x30\x33'
由十六进制值定义,'03'
由ASCII字符定义
最后,它们都是由两个字节48(0x30)和51(0x33)组成的数组
传感器仅接受十六进制值
传感器只接受字节,这取决于您需要如何对值进行编码。您需要发送数字3还是字符串“03” 如果是号码,您需要发送
“\x03”
或包(“B”,3)
如果它是一个字符串,您只需要发送
“03”
“\x30\x33”
与'03'
相同
>>> import struct
>>> print struct.pack('BB', 48, 51)
03
>>> print '\x30\x33'
03
>>> '\x30\x33' == '03'
True
'\x30\x33'
和'03'
是同一事物的不同表示形式。'\x30\x33'
由十六进制值定义,'03'
由ASCII字符定义
最后,它们都是由两个字节48(0x30)和51(0x33)组成的数组
传感器仅接受十六进制值
传感器只接受字节,这取决于您需要如何对值进行编码。您需要发送数字3还是字符串“03” 如果是号码,您需要发送
“\x03”
或包(“B”,3)
如果它是一个字符串,您只需要发送
“03”
如果不需要使用pack,您可以使用如下内容:
'\\'+hex(48)[1:]
如果没有必要使用pack,您可以使用以下内容:
'\\'+hex(48)[1:]
它不会为您提供
\x0003
。它为您提供了'03'
,因为Python尽可能将字节值显示为ASCII字符。它们仍然是值为\x30
和\x33
的字节。您必须更清楚地理解传感器仅接受十六进制值的含义,因为这样您就必须发送文本3
、0
和3
ASCII字符(字节0x33、0x30、0x33和0x33)。@Martijn Pieters♦ 我认为如果python将字节值显示为\x03,它也会发送\x03。我对python如何显示和处理字节字符串的理解是错误的,下一次我会更清楚。它不会给你\x0003
。它为您提供了'03'
,因为Python尽可能将字节值显示为ASCII字符。它们仍然是值为\x30
和\x33
的字节。您必须更清楚地理解传感器仅接受十六进制值的含义,因为这样您就必须发送文本3
、0
和3
ASCII字符(字节0x33、0x30、0x33和0x33)。@Martijn Pieters♦ 我认为如果python将字节值显示为\x03,它也会发送\x03。我对python如何显示和处理字节字符串的理解是错误的,下次我会更清楚。谢谢你的详细描述。我发现,我的错误与字节字符串无关,而是与打包前应用的位移位有关。(在你的位移位处加括号!)谢谢你的详细描述。我发现,我的错误与字节字符串无关,而是与打包前应用的位移位有关。(在位移位的周围加上括号!)