【发布时间】:2015-03-22 17:52:10
【问题描述】:
我正在阅读一个包含十六进制字节的文件,我相信这是我写的:
def ByteToHexToDec( byteStr ):
hex_list = [ "%02X" % ord(x) if "\\x" in r"%r" % x else x for x in byteStr];
return hex_list;
with open("file.z","rb") as lines:
for line in lines:
print ByteToHexToDec(line);
这是它返回的内容:
['04', '80', 'e', '06', 'C0', 'l', '06', 'F0', ',', '02', '00', 'w', '06', 'F0', 'r', '06', 'C0', 'd', '02', '10', '\n']
我很确定这说的是 hello world(或类似的东西),而且我知道“hello world”的十六进制是这样的:
480065006C006C006F00200077006F0072006C00640021
如果你仔细观察,'48' 与 hex_list 中的前两个元素匹配,除了零在路上,字母 e 的十六进制值是 65...
那么文件中的字节是否有一些错误?还是我读错了字节?
谢谢
文件可以在这里下载: https://drive.google.com/file/d/0B84_Z1V4nj9SS0x4MlR0a2poMkE/view?usp=sharing
【问题讨论】:
-
文件内容的输出是正确的。
-
我不确定您是如何生成该文件的,但您在该文件的开头有
0480,而不是4800。e被正确地保存为65字节,后跟两个字节构成下一个l为06c0。我怀疑您在创建文件时忘记填充字节。