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

Python实现十六进制字符串转大端有符号16位整数

十六进制字符串转大端字节序有符号16位整数的Python实现

要解决这个问题,直接用Python标准库的struct模块就能高效完成,它会自动处理补码转换和字节序问题,避免手动拼接字节的错误。

核心思路

  1. 将十六进制字符串转换为字节对象
  2. 使用struct.unpack指定大端字节序和有符号16位整数格式解析字节

基础实现代码

import struct

# 示例十六进制字符串(大端FF00对应有符号16位整数-256)
hex_str = "FF00"

# 1. 把十六进制字符串转成字节串
byte_data = bytes.fromhex(hex_str)
# 2. 用struct解析:'>'表示大端,'h'表示有符号16位整数
signed_int = struct.unpack('>h', byte_data)[0]

print(signed_int)  # 输出: -256

封装成通用函数

如果需要处理不同长度的输入(比如不足4位的十六进制字符串),可以封装成函数自动补零:

import struct

def hex_to_signed_int16(hex_str):
    # 自动补前导零,确保是4位十六进制(对应2字节)
    padded_hex = hex_str.zfill(4)
    # 转字节串
    byte_data = bytes.fromhex(padded_hex)
    # 大端解析有符号16位整数
    return struct.unpack('>h', byte_data)[0]

# 测试用例
print(hex_to_signed_int16("FF00"))  # -256
print(hex_to_signed_int16("7FFF"))  # 32767(最大有符号16位整数)
print(hex_to_signed_int16("8000"))  # -32768(最小有符号16位整数)
print(hex_to_signed_int16("00FF"))  # 255
print(hex_to_signed_int16("FF"))    # 自动补零为00FF,输出255

为什么之前的方法不行?

之前逐个输出字节值的方式,只是单独解析每个字节的无符号值,没有把两个字节组合成16位有符号整数。而struct.unpack会按照指定的字节序和数据类型,正确处理补码规则,直接得到符合预期的有符号整数结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:05:45