将str字节转换为字节

时间:2016-10-16 10:20:36

标签: python python-2.7 python-3.x

我有一个蓝牙控制器,可以在received_data中返回事件的数据,其中3& 4字节一起是16位带符号的little-endian int值。

使用python2,其中str也是一个字节,我只是用struct.unpact

来删除它。
rotation_value = struct.unpack("<h", received_data[3] + received_data[4])[0]

这对python3不起作用,因为str和byte不是同一个东西

rotation_value = struct.unpack("<h", received_data[3] + received_data[4])[0]
TypeError: 'str' does not support the buffer interface

所以我的方法是将str转换为字节。

这是我尝试过的事情

print((received_data[3]+received_data[3]).encode('utf_16_le'))
print(received_data[3].encode('ISO-8859-1') + received_data[4].encode('ISO-8859-1'))
print(int.from_bytes(bytes([ord(c) for c in (received_data[3]+received_data[3])]), byteorder='little', signed=True))

print(struct.unpack("<h", bytearray(received_data[3] + received_data[4], 'cp1252'))[0])

但无论我怎么做,我都会收到类似这样的错误消息:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xef in position 3: invalid continuation byte

由于@PM 2Ring建议使用latin1

print(received_data[3].encode('latin1'))

哪个不起作用

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 3: invalid continuation byte
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 3: invalid start byte

那究竟什么是以字节为单位转换这些假str的正确方法,最好是在python2&amp; 3.

0 个答案:

没有答案