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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:39:12