TypeError的Python struct.unpack错误:需要类似字节的对象,而不是'str'

时间:2016-02-07 04:55:01

标签: python parsing struct

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

真的感谢任何帮助,因为我目前被卡住了。

1 个答案:

答案 0 :(得分:4)

当您使用Python 2.x时, public bool Update(UserEdit userEdit) { User user = Find(userEdit.UserUsername); Mapper.CreateMap<UserEdit, User>(); user = (User)Mapper.Map(userEdit, user, typeof(UserEdit), typeof(User)); if (_modelState.IsValid) { _transactionManager.GetContext().Entry(user).State = System.Data.Entity.EntityState.Modified; _transactionManager.CommitTransaction(); return true; } else { return false; } } 是一个字节数组。对于Python 3,您必须使用str,如下所示:

bytes