Python 3.7:如何将8字节倍数的bytes转为8字节有符号整数列表?
将bytes对象转换为8字节有符号整数列表(Python 3.7)
你之前用list(some_bytes)得到的是每个字节的单字节无符号整数,这是因为该方法会逐个拆分bytes中的每个字节,而非按8字节组拼接解析,所以才会出现“像4字节整数处理”的误解(实际是单字节处理)。
要实现按8字节有符号整数解析,直接用Python标准库的struct模块即可,它支持指定字节长度、符号性和字节序来解析bytes:
实现步骤
- 导入
struct模块 - 选择字节序前缀:
<表示小端字节序,>表示大端字节序,=表示本机字节序(需根据数据源的字节序确定) - 用格式符
q对应8字节有符号整数(int64) - 计算解析数量:
len(some_bytes) // 8(你的bytes长度是8的倍数,刚好整除) - 用
struct.unpack()解析后转成列表
代码示例
import struct # 示例bytes对象(包含两个8字节有符号整数:-1 和 1,小端字节序) some_bytes = b'\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x01' # 生成格式字符串:小端字节序 + 对应数量的8字节有符号整数 count = len(some_bytes) // 8 fmt = f'<{count}q' # 解析并转为列表 int_list = list(struct.unpack(fmt, some_bytes)) print(int_list) # 输出: [-1, 1]
如果你的数据源是大端字节序,只需将格式前缀改为>即可:
fmt = f'>{count}q'
内容的提问来源于stack exchange,提问作者St.Antario
相关产品推荐
相关产品推荐

