有人可以帮助下面的代码行和错误吗?我不熟悉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]