有人可以帮助解决以下代码行和错误吗?我不熟悉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;
真的感谢任何帮助,因为我目前被卡住了。
答案 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