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

Python中Unicode字符十六进制值的Endianness(字节序)转换问题

小端序转大端序的正确实现

首先明确核心需求:十六进制字符串"61626364"对应字节序列b'\x61\x62\x63\x64'(即原始字符串"abcd"的字节),要将其从小端序转换为大端序,本质是反转字节顺序,最终应得到十六进制字符串"64636261"。

你之前的代码仅处理了首尾两个字符,完全忽略中间的62和63,这是问题的核心。下面提供两种正确实现方式:

方法一:直接操作十六进制字符串

先将十六进制字符串按每2个字符(对应一个字节)分割,反转分组后再拼接:

hexval = "61626364"
# 按每2个字符分割成单个字节的十六进制表示
byte_groups = [hexval[i:i+2] for i in range(0, len(hexval), 2)]
# 反转分组列表,拼接成大端序的十六进制字符串
big_endian_hex = ''.join(reversed(byte_groups))
print(big_endian_hex)  # 输出: 64636261

方法二:通过字节对象处理

先把十六进制字符串转为字节对象,反转字节序列后再转回十六进制字符串:

hexval = "61626364"
# 将十六进制字符串转为字节对象
byte_data = bytes.fromhex(hexval)
# 反转字节序列
reversed_byte_data = byte_data[::-1]
# 转回十六进制字符串
big_endian_hex = reversed_byte_data.hex()
print(big_endian_hex)  # 输出: 64636261

原代码错误原因

不管是直接操作字符串还是转字节数组,你只截取了前2个和后2个元素(对应十六进制的61和64),完全未处理中间的62和63。小端转大端需要反转所有字节的顺序,而非仅交换首尾两个字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:10:43