You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:27:04