繁体   English   中英

使用Python和超级终端的RS232串行对话中的ASCII到十六进制转换

[英]ASCII to Hex Conversion in RS232 Serial Dialogue in Python and Hyperterminal

我正在使用Python通过RS232串行对话从仪器进行数据传输。 数据以ASCII格式输入。 例如,这就是我使用Python从仪器中以ASCII格式获取的内容:

'\x02S20390908127F010102F3004000900300000000000000000000000000000300A500000000000202020202020206070505050505050000000707070707070707020700000000000000000000000000000000000000008000800089237A0715047E000000000000000000000000000000000000000000000000000000000000000000000000005350374646303030\x1732'

使用超级终端(Docklight)进行的相同数据传输给了我这个,以下是我在超级终端中得到的十六进制表示:

02 53 31 38 33 38 30 39 30 38 31 32 37 46 30 31 30 31 30 32 46 33 30 30 34 30 30 30 39 30 30 33 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 33 30 30 41 35 30 30 30 30 30 30 30 30 30 30 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 36 30 37 30 35 30 35 30 35 30 35 30 35 30 35 30 30 30 30 30 30 30 37 30 37 30 37 30 37 30 37 30 37 30 37 30 37 30 32 30 37 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 38 30 30 30 38 39 32 33 37 41 30 37 31 35 30 34 37 45 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 35 33 35 30 33 37 34 36 34 36 33 30 33 30 33 30 17 33 38 

我的问题是,如何使用Python从我得到的ascii数据中获得相同的十六进制表示。 当涉及到这类东西时,我非常菜鸟。 先感谢您。

说明:使用ord将每个字符转换为字节,然后将其格式化为两位数的十六进制数字,并将其输入列表。 然后使用空格作为分隔符加入列表。

>>> ll = ["%02X" % (ord(x)) for x in '\x02S20390908127F010102F3004000900300000000000000000000000000000300A500000000000202020202020206070505050505050000000707070707070707020700000000000000000000000000000000000000008000800089237A0715047E000000000000000000000000000000000000000000000000000000000000000000000000005350374646303030\x1732']
>>> ll           #as a list
['02', '53', '32', '30', '33', '39', '30', '39', '30', '38', '31', '32', '37', '46', '30', '31', '30', '31', '30', '32', '46', '33', '30', '30', '34', '30', '30', '30', '39', '30', '30', '33', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '33', '30', '30', '41', '35', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '32', '30', '32', '30', '32', '30', '32', '30', '32', '30', '32', '30', '32', '30', '36', '30', '37', '30', '35', '30', '35', '30', '35', '30', '35', '30', '35', '30', '35', '30', '30', '30', '30', '30', '30', '30', '37', '30', '37', '30', '37', '30', '37', '30', '37', '30', '37', '30', '37', '30', '37', '30', '32', '30', '37', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '38', '30', '30', '30', '38', '30', '30', '30', '38', '39', '32', '33', '37', '41', '30', '37', '31', '35', '30', '34', '37', '45', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '30', '35', '33', '35', '30', '33', '37', '34', '36', '34', '36', '33', '30', '33', '30', '33', '30', '17', '33', '32']
>>> ' '.join(ll) # as a string
'02 53 32 30 33 39 30 39 30 38 31 32 37 46 30 31 30 31 30 32 46 33 30 30 34 30 30 30 39 30 30 33 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 33 30 30 41 35 30 30 30 30 30 30 30 30 30 30 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 36 30 37 30 35 30 35 30 35 30 35 30 35 30 35 30 30 30 30 30 30 30 37 30 37 30 37 30 37 30 37 30 37 30 37 30 37 30 32 30 37 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 38 30 30 30 38 30 30 30 38 39 32 33 37 41 30 37 31 35 30 34 37 45 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 35 33 35 30 33 37 34 36 34 36 33 30 33 30 33 30 17 33 32'

这似乎是最简单的方法。

ascstr = 'x\02S20..."  #your string

#I think you need to get rid of the first 4 characters '\x02' looks like
#it is hex
ascstr = ascstr[4:] 
for c in mystring:
   hexstr = hexstr + hex(ord(c))[2:] + ' '

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM