Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何列出一个两字节的值_Python_List_Byte_Bytearray_Pyserial - Fatal编程技术网

Python 如何列出一个两字节的值

Python 如何列出一个两字节的值,python,list,byte,bytearray,pyserial,Python,List,Byte,Bytearray,Pyserial,我在Python中使用pyserial与设备进行串行通信。我必须从设备上读取一系列整数。每个元素都是一个2字节的无符号短[0-65535]。 我把港口的名字缩写为 port = serial.Serial("COM9", 38400, timeout=10.0) serial.PARITY_NONE serial.EIGHTBITS serial.STOPBITS_ONE data = port.read(50) 从设备接收的数据是 data=b' \xa0G\x0b1\x12\x04\x9

我在Python中使用pyserial与设备进行串行通信。我必须从设备上读取一系列整数。每个元素都是一个2字节的无符号短[0-65535]。 我把港口的名字缩写为

port = serial.Serial("COM9", 38400, timeout=10.0)
serial.PARITY_NONE
serial.EIGHTBITS
serial.STOPBITS_ONE
data = port.read(50)
从设备接收的数据是

 data=b' \xa0G\x0b1\x12\x04\x98\x93A\xcc\xb8\x86\x80V\xf1\xbdp \xc5a\x14\x13\xe8\x8b\x05\xe3P\xc99H\x02\xb8{&\x88\xa6 \x16Q&\xd4\x90j\xea'
当字节转换为字节列表时,我得到

data1=list(data)
print(data1)
字节数总是不同的。给出输出样本

[32, 132, 62, 66, 160, 16, 136, 44, 160, 71, 11, 49, 18, 4, 152, 147, 65, 204, 184, 134, 128, 86, 241, 189, 112, 32, 197, 97, 20, 19, 232, 139, 5, 227, 80, 201, 57, 72, 2, 184, 123, 38, 136, 166, 32, 22, 81, 38, 212, 144, 106, 234, 177, 192, 193, 255, 156, 90, 15, 32, 102, 5, 120, 104, 173, 224, 207, 100, 81, 19, 248, 105, 97, 12, 191, 192, 56, 208, 91, 9, 36, 141, 34, 172, 6, 91, 5, 48, 42, 22, 4, 81, 4, 38, 7, 232, 162, 18, 65, 93, 16, 33, 144, 174, 186, 221, 0, 237, 133, 25, 183, 129, 116, 48, 246, 119, 36, 150, 27, 75, 49, 33, 38, 34, 238, 41, 124, 29, 192, 16, 191, 50, 14, 22, 39, 209, 66, 17, 206, 29, 209, 175, 92, 120, 99, 49]
无法列出一个双字节值。。使用list方法可以得到的最大值是255。我应该在65535之前拿到价值

使用struct模块

from struct import unpack
data1= unpack('H', data)
我得到以下错误

struct.error: unpack requires a bytes object of length 15

您的
解包格式错误。您将指定一个10字节的字符串,后跟两个无符号的短字符,然后是一个有符号的字节。如错误消息中所示,这最多可添加15个字节。您有一个45字节的缓冲区,因此需要正确指定缓冲区应该包含的内容。

您的
解包格式是错误的。您将指定一个10字节的字符串,后跟两个无符号的短字符,然后是一个有符号的字节。如错误消息中所示,这最多可添加15个字节。您有一个45字节的缓冲区,因此需要正确指定缓冲区应该包含的内容。

您的
解包格式是错误的。您将指定一个10字节的字符串,后跟两个无符号的短字符,然后是一个有符号的字节。如错误消息中所示,这最多可添加15个字节。您有一个45字节的缓冲区,因此需要正确指定缓冲区应该包含的内容。

您的
解包格式是错误的。您将指定一个10字节的字符串,后跟两个无符号的短字符,然后是一个有符号的字节。如错误消息中所示,这最多可添加15个字节。您有一个45字节的缓冲区,因此您需要准确地指定缓冲区应该包含的内容。

假设发布的数据不正确,这只是一个复制粘贴错误,因为您无法将长度为
45
的字节数组转换为无符号短数组,而不会丢失最后一个字节

你可以使用的格式是:以下的格式,你可以使用的格式是-<代码>B\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0格式格式格式格式格式格式050*\x16\x04Q\x04&\x07\xe8\xa2\x12A]\x10!\x90\xae\xba\xdd\x00\XX\x85\x19\xb7\x81t0\xf6w$\x96\x1bK1!&“\xee)|\x1d\xc0\x10\xbf2\x0e\x16\'\xd1B\x11\xce\x1d\xd1 \xaf\\xc1'
>>>data1=struct.unpack(“假设发布的数据不正确,这只是复制粘贴错误,因为您无法将长度
45
的字节数组转换为无符号短数组,而不会丢失最后一个字节

你可以使用的格式是:以下的格式,你可以使用的格式是-<代码>B\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0格式格式格式格式格式格式050*\x16\x04Q\x04&\x07\xe8\xa2\x12A]\x10!\x90\xae\xba\xdd\x00\XX\x85\x19\xb7\x81t0\xf6w$\x96\x1bK1!&“\xee)|\x1d\xc0\x10\xbf2\x0e\x16\'\xd1B\x11\xce\x1d\xd1 \xaf\\xc1'
>>>data1=struct.unpack(“假设发布的数据不正确,这只是复制粘贴错误,因为您无法将长度
45
的字节数组转换为无符号短数组,而不会丢失最后一个字节

你可以使用的格式是:以下的格式,你可以使用的格式是-<代码>B\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0格式格式格式格式格式格式050*\x16\x04Q\x04&\x07\xe8\xa2\x12A]\x10!\x90\xae\xba\xdd\x00\XX\x85\x19\xb7\x81t0\xf6w$\x96\x1bK1!&“\xee)|\x1d\xc0\x10\xbf2\x0e\x16\'\xd1B\x11\xce\x1d\xd1 \xaf\\xc1'
>>>data1=struct.unpack(“假设发布的数据不正确,这只是复制粘贴错误,因为您无法将长度
45
的字节数组转换为无符号短数组,而不会丢失最后一个字节

你可以使用的格式是:以下的格式,你可以使用的格式是-<代码>B\0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0格式格式格式格式格式格式050*\x16\x04Q\x04&\x07\xe8\xa2\x12A]\x10!\x90\xae\xba\xdd\x00\XX\x85\x19\xb7\x81t0\xf6w$\x96\x1bK1!&“\xee)|\x1d\xc0\x10\xbf2\x0e\x16\'\xd1B\x11\xce\x1d\xd1 \xaf\\xc1'
>>>data1=struct.unpack(“我不明白你想在这里做什么。你想把一个45字节的二进制字符串解压成16位整数?你打算怎么处理剩下的字节?格式字符串
”是你发布的
数据的长度
正确吗?即使你需要从中读取2字节的整数和无符号整数,长度也必须正确。I我不明白你想在这里做什么。你想把一个45字节的二进制字符串解压成16位整数吗?你打算用剩下的字节做什么?格式字符串
“是你发布的
数据的长度是否正确?即使你需要从中读取2字节的无符号整数,长度也必须是。我不知道我不明白你想在这里做什么。你想把一个45字节的二进制字符串解压成16位整数吗?你打算用剩下的字节做什么?格式字符串
“是你发布的
数据的长度
正确吗?即使你需要从中读取2字节的整数和无符号整数,长度也必须是。我不取消了解您在这里尝试执行的操作。是否要将45字节的二进制字符串解压为16位整数?您将如何处理剩余的字节?格式字符串
“是您发布的
数据的长度是否正确?即使您需要从中读取2字节整数和无符号整数,长度也必须为。
>>> import struct
>>> s = [32, 132, 62, 66, 160, 16, 136, 44, 160, 71, 11, 49, 18, 4, 152, 147, 65, 204, 184, 134, 128, 86, 241, 189, 112, 32, 197, 97, 20, 19, 232, 139, 5, 227, 80, 201, 57, 72, 2, 184, 123, 38, 136, 166, 32, 22, 81, 38, 212, 144, 106, 234, 177, 192, 193, 255, 156, 90, 15, 32, 102, 5, 120, 104, 173, 224, 207, 100, 81, 19, 248, 105, 97, 12, 191, 192, 56, 208, 91, 9, 36, 141, 34, 172, 6, 91, 5, 48, 4
2, 22, 4, 81, 4, 38, 7, 232, 162, 18, 65, 93, 16, 33, 144, 174, 186, 221, 0, 237, 133, 25, 183, 129, 116, 48, 246, 119, 36, 150, 27, 75, 49, 33, 38, 34, 238, 41, 124, 29, 192, 16, 191, 50, 14, 22, 39, 209, 66, 17, 206, 29, 209, 175, 92, 120, 99, 49]
>>> len(s)
146
>>> data = struct.pack('B' * len(s) , *s)
>>> data
b' \x84>B\xa0\x10\x88,\xa0G\x0b1\x12\x04\x98\x93A\xcc\xb8\x86\x80V\xf1\xbdp \xc5a\x14\x13\xe8\x8b\x05\xe3P\xc99H\x02\xb8{&\x88\xa6 \x16Q&\xd4\x90j\xea\xb1\xc0\xc1\xff\x9cZ\x0ff\x05xh\xad\xe0\xcfdQ\x13\xf8ia\x0c\xbf\xc08\xd0[\t$\x8d"\xac\x06[\x050*\x16\x04Q\x04&\x07\xe8\xa2\x12A]\x10!\x90\xae\xba\xdd\x00\xed\x85\x19\xb7\x81t0\xf6w$\x96\x1bK1!&"\xee)|\x1d\xc0\x10\xbf2\x0e\x16\'\xd1B\x11\xce\x1d\xd1
\xaf\\xc1'
>>> data1 = struct.unpack('<' + 'H' * (len(data)//2) , data)
>>> data1
(33824, 16958, 4256, 11400, 18336, 12555, 1042, 37784, 52289, 34488, 22144, 48625, 8304, 25029, 4884, 35816, 58117, 51536, 18489, 47106, 9851, 42632, 5664, 9809, 37076, 60010, 49329, 65473, 23196, 8207, 1382, 26744, 57517, 25807, 4945, 27128, 3169, 49343, 53304, 2395, 36132, 44066, 23302, 12293, 5674, 20740, 9732, 59399, 4770, 23873, 8464, 44688, 56762, 60672, 6533, 33207, 12404, 30710, 38436, 19227, 8497, 8742, 10734, 7548, 4288, 12991, 5646, 53543, 4418, 7630, 45009, 30812, 12643)