如何将bytearray或bytes对象拆分为16位整数?
bytearray转16位整数列表实现方法
你示例的转换规则为大端序(高字节在前),可以用以下几种常用方案实现:
方法1:列表推导式 + int.from_bytes(最直观,无需导入模块)
直接按2字节拆分bytearray,逐段转换为16位无符号整数:
ba = bytearray([0x01, 0x02, 0x01, 0x03, 0xff, 0xff]) ia = [int.from_bytes(ba[i:i+2], byteorder='big', signed=False) for i in range(0, len(ba), 2)] print(hex(ia[1])) # 输出 0x103
如果需要有符号整数,把signed参数改为True即可;如果是小端序转换,把byteorder改为'little'。
方法2:struct模块(性能最优,适合大数据量)
用标准库struct的解包功能一次性完成转换,效率远高于逐段处理:
import struct ba = bytearray([0x01, 0x02, 0x01, 0x03, 0xff, 0xff]) # 格式符说明:> 代表大端序,H 代表16位无符号整数 ia = list(struct.unpack(f'>{len(ba)//2}H', ba)) print(hex(ia[1])) # 输出 0x103
小端序场景把>换成<即可;需要有符号整数把H换成h。
方法3:array模块(适合需要数值数组的场景)
如果需要更省内存、支持数值运算的数组对象,可以用标准库array:
import array import sys ba = bytearray([0x01, 0x02, 0x01, 0x03, 0xff, 0xff]) ia = array.array('H', ba) # 适配大端序,系统默认是小端时做字节交换 if sys.byteorder == 'little': ia.byteswap() print(hex(ia[1])) # 输出 0x103
内容的提问来源于stack exchange,提问作者ysap
相关产品推荐
相关产品推荐

