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
相关产品推荐
相关产品推荐

