Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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中将bytearray转换为短整型_Python_Arrays_Short - Fatal编程技术网

在python中将bytearray转换为短整型

在python中将bytearray转换为短整型,python,arrays,short,Python,Arrays,Short,我有一段很长的告别 barray=b'\x00\xfe\x4b\x00... 将其转换为2字节整数列表的最佳方式是什么?使用模块: 根据尾端的不同,您可能需要为解包格式预先添加一个。根据已签名/未签名,它是h,或者h,您可以使用struct包来实现: from struct import unpack tuple_of_shorts = unpack('h'*(len(barray)//2),barray) 这将产生签名短裤。对于未签名的,请使用'H': tuple_of_shorts =

我有一段很长的告别

barray=b'\x00\xfe\x4b\x00...
将其转换为2字节整数列表的最佳方式是什么?

使用模块:


根据尾端的不同,您可能需要为解包格式预先添加一个
。根据已签名/未签名,它是
h
,或者
h

,您可以使用
struct
包来实现:

from struct import unpack

tuple_of_shorts = unpack('h'*(len(barray)//2),barray)
这将产生签名短裤。对于未签名的,请使用
'H'

tuple_of_shorts = unpack('H'*(len(barray)//2),barray)
这将在小型endian机器上为您的示例输入生成:

>>> struct.unpack('h'*(len(barray)//2),barray)
(-512, 75)
>>> struct.unpack('H'*(len(barray)//2),barray)
(65024, 75)
如果要使用big-endian或little-endian,可以在规范中添加
(big-endian)或
>>解包('>'+'H'*(len(barray)//2),barray)#大端,未签名
(254, 19200)
>>>解包('>'+'h'*(len(barray)//2),barray)#big-endian,签名
(254, 19200)

>“打包”(如果内存效率是一个问题,您可以考虑使用<代码>数组。数组< /代码>:

>>> barr = b'\x00\xfe\x4b\x00'
>>> import array
>>> short_array = array.array('h', barr)
>>> short_array
array('h', [-512, 75])
这就像一个节省空间的原始数组,带有OO包装器,因此它支持序列类型的方法,如
列表
、append
和slicing

>>> short_array[:1]
array('h', [-512])
>>> short_array[::-1]
array('h', [75, -512])
此外,恢复
字节
对象变得很简单:

>>> short_array
array('h', [-512, 75])
>>> short_array.tobytes()
b'\x00\xfeK\x00'
注意,如果您想要与本机字节顺序相反的尾数,请使用在位
byteswap
方法:

>>> short_array.byteswap()
>>> short_array
array('h', [254, 19200])
注意,使用Python库转换数组还允许您为格式说明符中的每个项指定重复计数。因此,例如
4H
与使用
hhh
相同

使用此方法可以避免创建潜在的大量格式字符串:

import struct

barray = b'\x00\xfe\x4b\x00\x4b\x00'
integers = struct.unpack('{}H'.format(len(barray)/2), barray)

print(integers)
给你:

(65024, 75, 75)
>>> short_array.byteswap()
>>> short_array
array('h', [254, 19200])
import struct

barray = b'\x00\xfe\x4b\x00\x4b\x00'
integers = struct.unpack('{}H'.format(len(barray)/2), barray)

print(integers)
(65024, 75, 75)