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




