我正在将十六进制数转换为ASCII并将其直接打印在屏幕上。但是,我没有走到下一行,而是在输出控制台上看到了“ \ n”。你能看看我的代码并告诉我为什么我得到这个吗?
十六进制值存储在名为“ hexa”的文件中。
fin = open('hexa', 'r')
hexlist = fin.readline().split(' ')
for i in hexlist:
print(str(codecs.decode(i, 'hex')).strip("b'"), end='')
fin.close()
这是我得到的输出:
someRandomChanracters_._.\n\nOnly
但是我的预期输出是:
someRandomChanracters_._.
Only
提前感谢您的答复。
修改1: 我认为我的问题不是重点。从十六进制转换为ASCII时,我会遇到这些
a carriage return (0x0d) or a line feed (0x0a)
不是换行,而是打印字符'\ n'。另外,当我遇到单引号(任何特殊字符)时,它们会以以下格式打印:
"'"
"["hello"]" instead of [hello]
文本文件的内容如下:
D8 FF E0 FF 10 00 46 42 11 21 01 00 48 00 27 6E 2E 5F 2E 5F 6F 73 65
我的目标是将该十六进制文件内容转换为文本格式,而没有任何其他引号或诸如'\ n''\ t'之类的字符
我的问题是如何克服这个问题?
答案 0 :(得分:1)
尝试一下
with open('file1.txt','r') as f:
data = f.readlines()
data_list = [line.replace('\n', '') for line in data]
print(data_list)
输出:
['someRandomChanracters_._.', 'Only']
要以换行符打印,
print(*data_list, sep='\n')
or
# for i in data_list:
# print(i)
-------------
# Output:
# someRandomChanracters_._.
# Only
答案 1 :(得分:1)
当您遇到此类错误时,可以使用字符串“ split”功能。
string_variable = "someRandomChanracters_._.\n\nOnly"
first_part = string_variable.split("\n\n")[0] #before \n\n
second_part = string_variable.split("\n\n")[1] #after \n\n
以所需方式打印:
print(first_part + "\n" + "\n" + second_part)
答案 2 :(得分:0)
尝试一下:
with open('hexa', 'r') as f:
for line in f:
line = line.split(' ')
print(str(codecs.decode(line, 'hex')).strip("b'"), end='')
即使出现问题,with
关键字也会自动关闭文件。
答案 3 :(得分:0)
fin = open('hexa', 'r')
hexlist = fin.readline().split(' ')
for i in hexlist:
print(str(codecs.decode(i, 'hex')).strip("b'").replace('\n', ''), end='\n')
fin.close()
答案 4 :(得分:0)
让我们看一下代码的实际作用。
您假设使用了两个字符的字符串(假设为0a
),并将其解码为一个单字节字节数组。然后,您将获得此(str(...)
)的字符串表示形式,在我们的示例中,它将为b'\n'
。为什么?好吧,一个值为10(0x0a)的字节是ASCII中的换行符,因此Python将其显示为\n
,而b''
的作用是表明它是一个字节数组。然后,您将b
和'
:s剥离,并打印剩余的内容-反斜杠和字母n
。
您应该将其解码为字符串,而不是使用字节数组的字符串表示形式(这对除调试以外的其他操作毫无用处)。这样的东西(未经测试)可以工作
for i in hexlist:
print(codecs.decode(i, 'hex').decode('ascii'), end = '')
但是,您一次将解码一个字节,这意味着任何多字节编码(例如UTF-8)都将不起作用。更好的方法是一次解码整个字符串(假设字符串不会很长):
print(bytes([int(x, 16) for x in hexlist]).decode('utf-8'))
(请注意,for
循环已使用列表推导在print
调用内移动了。)