You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python新手求助:将文本文件中十进制值转换为十六进制格式

解决十进制数值转十六进制的问题

嘿,我来帮你搞定这个问题!你的代码现在得到的31353136360d0a...其实是把文件里每个字符的ASCII字节直接转成了十六进制(比如字符'1'的ASCII码是49,对应十六进制31),这显然不是你想要的——你需要的是把十进制数字转换成对应的十六进制数值,而不是字符的编码。另外你的代码还有个小bug:调用f.read()前根本没打开输入文件,运行时会直接报错哦。

下面是完全贴合你需求的修正代码,我会一步步解释:

# 定义输入输出文件路径
input_file = '1.txt'
output_file = 'out.txt'

# 使用with语句自动管理文件(不用手动close,更安全)
with open(input_file, 'r') as in_f, open(output_file, 'w') as out_f:
    # 逐行读取输入文件
    for line in in_f:
        # 处理每行:去掉首尾空白(比如换行符),按空格分割成十进制数字字符串
        decimal_str_list = line.strip().split()
        # 逐个转换:字符串转整数 → 格式化为4位大写十六进制(16位整数对应4位十六进制)
        hex_str_list = [f"{int(num):04X}" for num in decimal_str_list]
        # 把转换后的十六进制数用空格拼接成一行,写入输出文件
        out_f.write(' '.join(hex_str_list) + '\n')

关键细节解释:

  • with语句:这是Python处理文件的最佳实践,它会在代码块结束后自动关闭文件,避免忘记close()导致的资源泄漏。
  • line.strip().split():先清理掉每行的换行符和前后空格,再把一行内容按空格拆分成单个的十进制数字字符串(比如"15166 46818"会变成["15166", "46818"])。
  • f"{int(num):04X}":这个格式化字符串是核心:
    • int(num):把字符串形式的十进制数字转成整数。
    • :04X:指定格式为4位大写十六进制,如果数值不足4位会自动补前导零(比如十进制640转十六进制是0x280,格式化后变成0280)。如果想要小写十六进制,把X改成x就行。
  • 保持行结构:转换后的每行和原文件的行一一对应,格式完全一致。

测试效果:

假设你的1.txt里有一行:

15166 46818 26814 640 44756 27831 2646

运行代码后,out.txt里对应的行就会是:

3B5E B722 68BE 0280 AEE4 6CB7 0A56

这样就完美实现你的需求啦!

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

火山引擎 最新活动