Python实现UTF-16与十六进制互转及ROM文件字符转十六进制求助
问题分析与解决方案
1. 修复ROM读取与UTF-16字符转十六进制逻辑
你的原始代码存在两处关键问题:一是文件读取方式错误(仅读取单个字符且未指定UTF-16编码),二是字符转十六进制的核心逻辑缺失。修正后的完整代码如下:
def read_rom_to_utf16_hex(RomPath): ROMHEX = [] # 以UTF-16编码打开文件,若文件无BOM需指定utf-16-le或utf-16-be with open(RomPath, 'r', encoding='utf-16') as f: ROM = f.read() # 读取整个文件内容 for char in ROM: # 获取字符Unicode码点,转为4位大写十六进制字符串 hex_str = f"{ord(char):04X}" ROMHEX.append(hex_str) return ROMHEX
2. 解决测试代码无输出问题
你之前的测试代码:
number = int('0030', base=16) print(str(number))
理论上应输出48,无输出大概率是代码未被执行(如未调用函数、脚本未运行)。直接运行这段代码或添加调用逻辑即可看到结果。
3. 十六进制字符串(0000-FFFF)与UTF-16互转实现
十六进制转UTF-16字符
def hex_to_utf16_char(hex_str): hex_str = hex_str.zfill(4) # 确保是4位十六进制字符串 code_point = int(hex_str, 16) return chr(code_point)
UTF-16字符转十六进制字符串
def utf16_char_to_hex(char): # 输出大写十六进制,改用:x可输出小写 return f"{ord(char):04X}"
批量互转示例
# 批量十六进制转UTF-16 hex_list = ['0041', '0062', '4E2D'] utf16_str = ''.join([hex_to_utf16_char(h) for h in hex_list]) print(utf16_str) # 输出:Ab中 # 批量UTF-16转十六进制 test_str = "Hello世界" hex_result = [utf16_char_to_hex(c) for c in test_str] print(hex_result) # 输出:['0048', '0065', '006C', '006C', '006F', '4E16', '754C']
注意:处理无BOM的UTF-16文件时,需在open时明确指定字节序编码(utf-16-le或utf-16-be),避免编码错误。
内容的提问来源于stack exchange,提问作者PizzerLover123
相关产品推荐
相关产品推荐

