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

时间:2015-09-04 15:46:53

标签: python struct pack

我对struct module和pack方法有一个问题(可能在理解中)。我需要打包消息与传感器通信。此消息的一个值是整数的ascii表示(在本例中为“0”和“3”),即48和51.传感器仅接受十六进制值(在本例中为30和33)。但是当我使用pack('BB',48,51)时,它会给我'\ x0003',但我需要'\ x30 \ x33'。有没有办法将这两个字符转换为“hex-binaries”?

2 个答案:

答案 0 :(得分:3)

'\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"pack("B", 3)
如果它是一个字符串,您只需发送"03"

答案 1 :(得分:0)

如果使用pack不是必须的,你可以使用这样的东西:

'\\'+hex(48)[1:]