【发布时间】:2016-12-16 21:08:37
【问题描述】:
我目前正在尝试通过 RS485 连接到电表。 到目前为止,它工作得很好,除了我在读取仪表在 RS485 线路上写回的内容时遇到问题。
我知道电表的数据是正确的,因为我可以用 Docklight 和制造商的内部程序读取它。
所以我唯一的问题是我要返回的十六进制字节的转换。
我收到了
>>> b'\x01\x03\x04Ce/\xec\xe2'
这应该是 8 或 9 个十六进制字节。 我希望收到类似的东西
>>> b'\x01\x03\x04\x43\x67\x81\xEC\x43\x68'
问题似乎是 python 将它解释为“ASCII”,因为它是非十六进制数字,我无法进一步转换它。 我得到的错误是
>>> binascii.Error: Non-hexadecimal digit found`
当我从另一边看它时,相当于。 我正在发送
>>> data=bytearray([0x01,0x03,0x4A,0x38,0x00,0x02,0x53,0xDE])
显示为
>>> bytearray(b'\x01\x03J8\x00\x02S\xde')
当我打印它时
那么我如何告诉 python-3 我想查看 8 个十六进制字节而不是他自动做出的一些解释?我相信一旦您知道在哪里寻找,我就会错过一些非常容易的东西。
我想将字节 4,5,6,7 转换为浮点数。但是因为它显示的是非十六进制数字,所以我不能这样做。
【问题讨论】:
-
为什么需要这些字节作为十六进制数字?您是在尝试调试代码并想知道字节的内容为十六进制数字,还是需要将此数据显示给程序的用户?您在此处查看调试信息,而不是最终用户友好的表示。
-
如果您只想将这些字节转换为整数,请查看
int.from_bytes方法。 -
您打算如何将十六进制数字转换为浮点数?您通常会采用字节值。这些值都还在。
标签: python python-3.x hex binascii