【发布时间】:2014-12-29 17:04:40
【问题描述】:
我有一个 .raw 图像文件,我想使用 python3 从文件中读取所有数据并打印该图像的十六进制转储。
如果可能,我希望它在终端窗口中运行。
这是我目前找到并改编的代码:
import sys
src = sys.argv[1]
def hexdump( src, length=16, sep='.' ):
result = [];
# Python3 support
try:
xrange(0,1);
except NameError:
xrange = range;
for i in xrange(0, len(src), length):
subSrc = src[i:i+length];
hexa = '';
isMiddle = False;
for h in xrange(0,len(subSrc)):
if h == length/2:
hexa += ' ';
h = subSrc[h];
if not isinstance(h, int):
h = ord(h);
h = hex(h).replace('0x','');
if len(h) == 1:
h = '0'+h;
hexa += h+' ';
hexa = hexa.strip(' ');
text = '';
for c in subSrc:
if not isinstance(c, int):
c = ord(c);
if 0x20 <= c < 0x7F:
text += chr(c);
else:
text += sep;
result.append(('%08X: %-'+str(length*(2+1)+1)+'s |%s|') % (i, hexa, text));
return '\n'.join(result);
if __name__ == "__main__":
print(hexdump(src, length=16, sep='.'))
我一直在终端使用命令:
python3 nameoffile.py nameofrawfile.raw
它只是给了我原始文件名称的十六进制值。我希望它读取原始文件,然后以十六进制形式提供其中的所有数据。
谢谢。
编辑:我想使用 python,因为一旦文件以十六进制值表示,我想使用 python 对其进行进一步处理。
【问题讨论】:
-
那么,你坚持哪一部分,到目前为止你尝试了什么?
-
为什么选择 Python?为什么不直接使用像 hexdump 这样的现成程序?
-
大家好,感谢您的 cmets,我将编辑我的帖子以展示我到目前为止所做的尝试。