
当一个 32 位整数(如 0x68323634)实际存储的是 ASCII 编码的 4 字符序列(如 "h264")时,需先将其转换为对应字节序列,再以 ASCII 解码,才能得到预期字符串。
当一个 32 位整数(如 `0x68323634`)实际存储的是 ascii 编码的 4 字符序列(如 `"h264"`)时,需先将其转换为对应字节序列,再以 ascii 解码,才能得到预期字符串。
在 Python 中,整数本身不携带编码信息,print(str(x)) 仅输出其十进制数值表示(如 1748121140),而非原始字节含义。要还原为字符,关键在于:将整数视为紧凑的 4 字节二进制数据,并按正确的字节序解释。
由于 0x68323634 对应十六进制字节 68 32 36 34,而 ASCII 码中 0x68='h'、0x32='2'、0x36='6'、0x34='4',因此这属于大端序(big-endian)布局:最高有效字节 0x68 在前。
推荐做法是使用 int.to_bytes() 方法生成字节对象,再用 .decode('ascii') 转换为字符串:
x = 0x68323634
result = x.to_bytes(4, 'big').decode('ascii')
print(result) # 输出: h264
⚠️ 注意事项:
- to_bytes(length, byteorder) 中 length=4 必须精确匹配整数所需字节数(0x68323634 是 32 位,即 4 字节);若值超出范围会抛出 OverflowError;
- byteorder 参数必须与原始编码一致:'big'(网络序/大端)适用于大多数协议标识(如 FourCC 码),若数据来自小端系统(如某些 x86 二进制),则需改用 'little';
- 解码时指定 'ascii' 安全且高效;若可能含非 ASCII 字符,可改用 'latin-1' 或 'utf-8'(但需确保字节序列合法);
- 反向操作(字符串转整数)可用:int.from_bytes(b"h264", "big")。
该方法简洁、无依赖、符合 Python 3.2+ 标准,是处理 FourCC、魔数(magic number)等场景的标准实践。











