繁体   English   中英

带有 TypeError 的 Python struct.unpack 错误:需要一个类似字节的对象,而不是“str”

[英]Python struct.unpack errors with TypeError: a bytes-like object is required, not 'str'

有人可以帮忙解决以下代码行和错误吗? 我不熟悉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

这是关于如何从设备RAW Wave Value(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]

如果您使用 python3,您可以使用以下几行接收到的数据并将其转换为短数据类型。

struct.unpack('<h', data)
struct.unpack('<h', data[0:4])
struct.unpack('<h', b''.join(…))

如果它以列表的形式接收数据,它使用将数组转换为字节:

struct.unpack('<h', bytes(data))

请记住,您必须将您的信息转换为字节而不是作为 str 发送,以便使用所需数据类型的解包和解压缩信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM