如何显示十六进制转储 - EBCDIC和十六进制值中的每个字节

时间:2017-01-20 05:51:20

标签: python

我有一个十六进制转储,我需要在另一个文件的格式化显示中显示。 在Python中,我们可以将字节读为1个字符,即“C'”,是否有一个库,我们可以将每个字节读取为' C1'并转换为字符' A'以显示?

HEX DUMP

C1C20300 D1D2D3F0 00000000 00000000
000042F9 F8F0F800 40404040 40404040
40404040 C3C4C5C6 C7C8C9D2 40404040
40404040 40D1C1E8 D1C1E840 40404040
40404040 40404040 40404040 40404040
40404040 40404040 40404040 E9E8F040

EBCDIC中的CHARS

A B 0300  I J K 0 00000000 00000000
000042 9  8 0 800                  
          C D E F  G H I K  
            J A Y  J A Y   

                            Z Y 0  

1 个答案:

答案 0 :(得分:0)

您肯定可以从十六进制转储转到整数列表。 (我假设文件不是太大;如果是,请改用readline()。)

dump = ''.join(open("dump").read().split())
raw = bytes(int(dump[i:i+2], 16) for i in range(0, len(dump), 2))
# b'\xc1\xc2\x03\x00\xd1\xd2\xd3\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00B\xf9\xf8\xf0\xf8\x00@@@@@@@@@@@@\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xd2@@@@@@@@@\xd1\xc1\xe8\xd1\xc1\xe8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\xe9\xe8\xf0@'

事实上,EDCDIC被Python称为“cp500”:

text = raw.decode("cp500")
#'AB\x03\x00JKL0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00â9808\x00            CDEFGHIK         JAYJAY                                 ZY0 '