将字节/位解码为二进制

时间:2016-10-18 10:10:13

标签: python byte decoding bits gpib

我在仅LISTEN模式下使用Prologix GPIB-USB适配器来破译两个设备之间的通信(半导体相关,即Tester和Prober)。

我能够解码手册中所述的大部分信息,但无法转换其中一个数据即BIN类别。

示例数据:

018022
C@A@@@@@@@
Q
O
A
A
019022
CA@A@@@@@@

工具手册:

Manual on How to read Incoming Data

我参与的数据是“C @ A @@@@@@@”和“CA @ A @@@@@@” 第一个字节即“C”是传入的命令。 可以是“@”或“A”的第二个字节实际上告诉测试是否通过。

转换为二进制文件:

@ ---> 0100 0000
A ---> 0100 0001

结果由字节的低4位决定,即0000(通过)和0001(失败)。我能够正确解码它,直到这里。

接下来的8个字节代表BIN类别,如果测试失败则在测试期间设置为5,如果测试失败则设置为1,因此“C @ A @@@@@@@”中的BIN编号为1且BIN对应于“CA @ A @@@@@@”的编号设置为5。

我无法从GPIB适配器生成的数据中解码5和1的值。有人可以建议它是否可以实际解码为5和1.我附上了手册,解释了如何读取传入的数据。

长期坚持: - (

1 个答案:

答案 0 :(得分:0)

您可以使用struct.unpack将字节值解码为数字。您需要知道长度(在这种情况下为8个字节)以及数字是大还是小(如果您不知道,请进行测试)。数字是签名还是未签名。

如果您的字符串是“C @ A @@@@@@@”并且二进制数据是字节3-10,您可以尝试

import struct    
foo="C@A@@@@@@@"
print struct.unpack(">Q", foo[3:11])

这将解码一个8字节长的无符号大端数。有关说明,请参阅https://docs.python.org/2/library/struct.html

希望这会有所帮助。

哈努哈利