You need to enable JavaScript to run this app. Python中如何将3字节、6字节大端补码bytes实例转换为int类型?
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将3字节、6字节大端补码bytes实例转换为int类型?

方案1:使用int.from_bytes(推荐,Python 3.2+支持)

Python内置的int.from_bytes方法支持任意长度的bytes转换,不需要依赖struct模块,也不受标准字节长度限制,刚好适配你的需求:

# 3字节大端补码转int
def bytes3_to_int(b: bytes) -> int:
    if len(b) != 3:
        raise ValueError("输入字节长度必须为3")
    return int.from_bytes(b, byteorder="big", signed=True)

# 6字节大端补码转int
def bytes6_to_int(b: bytes) -> int:
    if len(b) != 6:
        raise ValueError("输入字节长度必须为6")
    return int.from_bytes(b, byteorder="big", signed=True)

示例运行效果:

  • 输入b'\x00\x00\x7f'调用bytes3_to_int,返回127
  • 输入b'\xff\xff\x80'调用bytes3_to_int,返回-128

方案2:兼容旧Python版本(基于struct补位实现)

如果需要适配Python 3.2以下版本,可以手动对字节做符号位扩展,补到struct支持的标准长度后再解析:

import struct

def bytes3_to_int(b: bytes) -> int:
    if len(b) != 3:
        raise ValueError("输入字节长度必须为3")
    # 符号位扩展为4字节,匹配struct的>i格式(4字节大端有符号整数)
    pad = b'\xff' if (b[0] & 0x80) else b'\x00'
    return struct.unpack(">i", pad + b)[0]

def bytes6_to_int(b: bytes) -> int:
    if len(b) != 6:
        raise ValueError("输入字节长度必须为6")
    # 符号位扩展为8字节,匹配struct的>q格式(8字节大端有符号整数)
    pad = b'\xff\xff' if (b[0] & 0x80) else b'\x00\x00'
    return struct.unpack(">q", pad + b)[0]

你解析SQLite文件格式的场景直接使用方案1即可,逻辑简单,性能也更高。

内容的提问来源于stack exchange,提问作者Michal Charemza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:27:03