我正在尝试将字节/十六进制字符串转换为整数。
我有一个从串口读取器返回的数据文本日志,这与辐射有关。 日志记录如下:
<20110805104053.421>
#00#00#64#05#00#00#00#00#00#00#3C#00#00#0D#0A
<20110805104055.421>
#00#00#5AÉ#00#00#00#00#00#00#3C#00#00#0D#0A
20110805104057.421>
#00#00#60÷#00#00#00#00#00#00#3C#00#00#0D#0A
<20110805104059.421>
#00#00#59#1C#00#00#00#00#00#00#3C#00#00#0D#0A
<20110805104101.421>
#00#00#5D#56#00#00#00#00#00#00#3C#00#00#0D#0A
<20110805104103.421>
#00#00#5D#09#00#00#00#00#00#00#3C#00#00#0D#0A
格式:
<TIMESTAMP (YYYY,MM,DD,HHMMSS.SS)>
DATA
在这种情况下,只使用前4个哈希值的数据:
#00#00#5D#56
通过格式化字符串和使用代码:
>>> logdata = b'\x00\x00\x5D\x56'
>>> struct.unpack(">l", logdata)
(23894,)
>>> int(binascii.hexlify(bytearray(logdata)),16)
result: 23894
这些数字是预期的,但有时字符串保存在特殊字符中:
<20110805104055.421>
#00#00#5AÉ#00#00#00#00#00#00#3C#00#00#0D#0A
使用与上述相同的set方法,我将前4个转换为:
#00#00#5AÉ#00 or ('\x00\x00\x5AÉ\x00')
预期结果是(来自http://www.asciitohex.com/):
23040
我的第一个结果是:
5949696
原本的数据是错误的,所以我将字节调整为'\x00\x00\x5AÉ'
并重新运行,结果如下:
23241
非常接近23040,但不是23040???这在一系列数字中相当可重复,但不正确。当不使用特殊字符时,我的结果与预期相符,并在asciitohex网站上转换。