2024-05-13 08:32:09 发布
网友
我有一个很长的告别日
barray=b'\x00\xfe\x4b\x00...
将其转换为2字节整数列表的最佳方法是什么?
您可以使用struct包来实现:
struct
from struct import unpack tuple_of_shorts = unpack('h'*(len(barray)//2),barray)
这将产生符号短路。对于未签名的,请使用'H':
'H'
tuple_of_shorts = unpack('H'*(len(barray)//2),barray)
这在小端机器上为您的样本输入生成:
>>> struct.unpack('h'*(len(barray)//2),barray) (-512, 75) >>> struct.unpack('H'*(len(barray)//2),barray) (65024, 75)
如果您想使用big endian或little endian,可以在规范中添加>(big endian)或<(little endian)。例如:
>
<
# Big endian tuple_of_shorts = unpack('>'+'H'*(len(barray)//2),barray) # unsigned tuple_of_shorts = unpack('>'+'h'*(len(barray)//2),barray) # signed # Little endian tuple_of_shorts = unpack('<'+'H'*(len(barray)//2),barray) # unsigned tuple_of_shorts = unpack('<'+'h'*(len(barray)//2),barray) # signed
正在生成:
>>> unpack('>'+'H'*(len(barray)//2),barray) # big endian, unsigned (254, 19200) >>> unpack('>'+'h'*(len(barray)//2),barray) # big endian, signed (254, 19200) >>> unpack('<'+'H'*(len(barray)//2),barray) # little endian, unsigned (65024, 75) >>> unpack('<'+'h'*(len(barray)//2),barray) # little endian, signed (-512, 75)
使用struct模块:
import struct count = len(barray)/2 integers = struct.unpack('H'*count, barray)
根据endianness,您可能需要为解包格式预先准备一个<或>。根据有符号/无符号,它是h,或者H。
h
H
注意,使用Python^{}库转换数组还允许您为格式说明符中的每个项指定重复计数。例如4H与使用HHHH相同。
4H
HHHH
使用这种方法可以避免创建潜在的大量格式字符串:
import struct barray = b'\x00\xfe\x4b\x00\x4b\x00' integers = struct.unpack('{}H'.format(len(barray)/2), barray) print(integers)
给你:
(65024, 75, 75)
您可以使用
struct
包来实现:这将产生符号短路。对于未签名的,请使用
'H'
:这在小端机器上为您的样本输入生成:
如果您想使用big endian或little endian,可以在规范中添加
>
(big endian)或<
(little endian)。例如:正在生成:
使用struct模块:
根据endianness,您可能需要为解包格式预先准备一个
<
或>
。根据有符号/无符号,它是h
,或者H
。注意,使用Python^{} 库转换数组还允许您为格式说明符中的每个项指定重复计数。例如
4H
与使用HHHH
相同。使用这种方法可以避免创建潜在的大量格式字符串:
给你:
相关问题 更多 >
编程相关推荐