Python 如何读取二进制数据并以二进制或十六进制格式打印?

Python 如何读取二进制数据并以二进制或十六进制格式打印?,python,encoding,binary-data,hexdump,Python,Encoding,Binary Data,Hexdump,我正在处理二进制数据。我有一个包含2KB二进制数据的文件。我使用以下代码读取文件,然后打印它。我还尝试在终端中使用hextump查看文件内容。我在python和hexdump中获得了同一文件的不同输出和(如所附屏幕截图所示)。我想这可能是由于python使用的编码方案?我对处理二进制数据非常幼稚。有人能检查一下,告诉我原因吗?我还想知道这是否是读取大型二进制文件的正确方法 print("First File \n"); f1 = open("/data/SRAMDUMP/dataFiles/fi

我正在处理二进制数据。我有一个包含2KB二进制数据的文件。我使用以下代码读取文件,然后打印它。我还尝试在终端中使用hextump查看文件内容。我在python和hexdump中获得了同一文件的不同输出和(如所附屏幕截图所示)。我想这可能是由于python使用的编码方案?我对处理二进制数据非常幼稚。有人能检查一下,告诉我原因吗?我还想知道这是否是读取大型二进制文件的正确方法

print("First File \n");
f1 = open("/data/SRAMDUMP/dataFiles/first.bin","rb")
num1 = list(f1.read())
print(num1)
f1.close()

我想这可能是由于python使用的编码方案

没有“编码方案”hexdump将二进制数据格式化为十六进制(每个字节两个半字节),您已经将文件的二进制内容转换为一个列表,该列表生成一个整数列表(因为在python中字节就是这样)

如果要在Python中将字节转换为可打印的十六进制,请使用bytes.hex方法。如果您想要类似于hextump的东西,您需要注意切片、间距和回车

慢速版本只需每2个字节读取2个字节的文件,对其进行十六进制,打印,然后每16个字节换行一次。Python 3.8为bytes.hex()添加了格式化功能,这意味着您可以更轻松地读取字节16乘16,每两个字节使用一个分隔符,尽管这与hexdump的格式并不完全匹配:

f=open(sys.argv[1],'rb')
it=国际热核实验堆(功能工具部分(f.read,16),“”)
对于枚举(it)中的i、b:
打印(f'{16*i:07x}{b.hex(“,2)}”)

还要注意,默认情况下,
hextump
遵循平台的endianness,即。。。很少是您想要的,并且与您的Python输出不匹配
hextump-C
按文件顺序打印字节。

谢谢您的回答。我已经尝试了代码,我得到了以下错误。回溯(最后一次调用):文件“/data/pythonScripts/readBinaryData/readDataTest.py”,第8行,在print(f'{16*i:07x}{b.hex(“,2)}”)TypeError:hex()中没有参数(给定2个),如注释中所述,格式参数是在Python 3.8中添加的。如果您使用的是旧版本,则必须手动格式化。