有人可以帮助下面的代码行和错误吗?我不熟悉python值转换。

产生错误的特定行是:

value = struct.unpack("<h",chr(b)+chr(a))[0]


TypeError:需要一个类似字节的对象,而不是'str'

代码片段是:

                    if packet_code ==0x80: # raw value
                        row_length = yield
                        a = yield
                        b = yield
                        value = struct.unpack("<h",chr(b)+chr(a))[0]


输入数据为:


  b'\ x04 \ x80 \ x02 \ x00 \ xb2 \ xcb \ xaa \ xaa \ x04 \ x80 \ x02 \ x00p \ r \ xaa \ xaa \ x04 \ x80 \ x02 \ x00]
  \ xaa \ xaa \ x04 \ x80 \ x02 \ x00 @ = \ xaa \ xaa \ x04 \ x80 \ x02 \ x007F \ xaa \ xaa \ x04 \ x80 \ x02 \ x00 \!\ xaa \ xaa \ x04 \ x80 \ x02 \ x00 = @ \ xaa \ xaa \ x04 \ x80 \ x02 \ x00 = @ \ xaa \ xaa \ x04 \ x80 \ x02 \ x00i \ x14 \ xaa \ xaa \ x04 \ x80 \ x02 \ x00]
  \ xaa \ xaa \ x04 \ x80 \ x02 \ x00p \ r \ xaa \ xaa \ x04 \ x80 \ x02 \ x00 \ x80 \ xfd \ xaa \ xaa


我正在使用python 3.5。该代码似乎在较旧的版本中有效。

这是指向以前的Python版本的类似解析器代码的链接:
Parser Code Link

Here is the link to the description of how the data is sent from the device
RAW Wave值(16位)

该数据值由两个字节组成,代表一个原始波样本。它的值是一个有符号的16位整数,范围为-32768到32767。Value的第一个字节表示二进制合规值的高位,而第二个字节表示低位。要重构完整的原始波值,只需将第一个字节左移8位,然后按位或第二个字节:

short raw = (Value[0]<<8) | Value[2];


其中,Value [0]是高位字节,Value 1是低位字节。

在不方便使用位运算的系统或语言中,可以替代以下算术运算:

raw = Value[0]*256 + Value[1];
if( raw >= 32768 ) raw = raw - 65536;


非常感谢任何帮助,因为我目前仍处于困境。

最佳答案

使用Python 2.x时,str是字节数组。对于Python 3,您必须像这样使用bytes

struct.unpack("<h", bytes([b, a]))[0]

09-10 00:41