Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python包字符串作为ascii十六进制值_Python_Struct_Pack - Fatal编程技术网

Python包字符串作为ascii十六进制值

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

我对struct模块和pack方法有一个问题(可能是理解上的问题)。我需要打包一条信息以便与传感器通信。此消息的一个值是整数的ascii表示(在本例中为“0”和“3”),即48和51。传感器仅接受十六进制值(在本例中为30和33)。但当我使用
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如何显示和处理字节字符串的理解是错误的,下次我会更清楚。谢谢你的详细描述。我发现,我的错误与字节字符串无关,而是与打包前应用的位移位有关。(在你的位移位处加括号!)谢谢你的详细描述。我发现,我的错误与字节字符串无关,而是与打包前应用的位移位有关。(在位移位的周围加上括号!)