有人能帮忙处理下面的代码和错误吗?我不熟悉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\xaa\x04\x80\x02\x00] \xaa\xaa\x04\x80\x02\x00p\r\xaa\xaa\x04\x80\x02\x00\x80\xfd\xaa\xaa
我正在使用python3.5。这段代码似乎适用于旧版本。
下面是指向类似解析器代码的链接,其中它可能与先前版本的Python:解析器代码链接一起工作。
下面链接到如何从设备发送数据的说明。 原始波值(16位)
此数据值由两个字节组成,表示单个原始波形示例。它的值是一个有符号的16位整数,范围从-32768到32767.值的第一个字节表示两个互补值的高阶位,而第二个字节表示低阶位。要重建完整的原始波形值,只需将8位留下的第一个字节按位移动--或者用第二个字节:
short raw = (Value[0]<<8) | Value[2];其中值是高阶字节,值1是低阶字节.
在位操作不便的系统或语言中,可以替换以下算术操作:
raw = Value[0]*256 + Value[1];
if( raw >= 32768 ) raw = raw - 65536;非常感谢任何帮助,因为我目前被困住了。
发布于 2016-02-07 05:01:32
当您使用Python2.x时,str是一个字节数组。对于Python3,您必须像这样使用bytes:
struct.unpack("<h", bytes([b, a]))[0]发布于 2022-05-31 17:30:14
如果使用python3,则可以对接收到的数据使用以下行,并将其转换为短数据类型。
struct.unpack('<h', data)
struct.unpack('<h', data[0:4])
struct.unpack('<h', b''.join(…))如果它以列表的形式接收数据,则将数组转换为字节:
struct.unpack('<h', bytes(data))记住,您必须将信息转换为字节,而不是以str的形式发送,以便使用解压缩和解压缩所需的数据类型中的信息。
https://stackoverflow.com/questions/35249879
复制相似问题