gpt4 book ai didi

python - 横向排列十六进制

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:11 24 4
gpt4 key购买 nike

我有一个需要以十六进制显示的二进制文件。代码如下:

file=open('myfile.chn','rb')  
for x in file:
i=0
while i<len(x):
print ("%0.2X"%(x[i]))
i=i+1
if (i>=10):
i=0
break
file.close()

我得到的结果如下:

FF  
FF
01
00
01
00
35
36
49
EC
.
.
.

为了显示如下结果,我需要更改代码的哪一部分?

FF FF 01 00 01   
00 35 36 49 EC
.
.

(每个字节之间有一个空格)

最佳答案

因为你只需要 10 个元素,我会使用:

print(" ".join("%0.2X" % s for s in x[:10]))

或者如果你想包含整行:

print(" ".join("%0.2X" % s for s in x))

您的初始版本仍然存在错误。您的输入被读取为每行一个字符串。类型转换“%0.2X”失败(“%s”有效)。我认为你不能每行读取二进制文件。\n 只是另一个字节,不能解释为换行符。

当您拥有一系列 int 值时,您可以使用 group 方法创建 n 个元素的分区。分组方法在itertools recipies .

from itertools import zip_longest

def grouper(n, iterable):
args = [iter(iterable)] * n
return zip_longest(fillvalue=None, *args)

width=10
x = range(1,99)
for group in grouper(width, x):
print((" ".join("%0.2X" % s for s in group if s)))

输出:

01 02 03 04 05 06 07 08 09 0A
0B 0C 0D 0E 0F 10 11 12 13 14
15 16 17 18 19 1A 1B 1C 1D 1E
1F 20 21 22 23 24 25 26 27 28
29 2A 2B 2C 2D 2E 2F 30 31 32
33 34 35 36 37 38 39 3A 3B 3C
3D 3E 3F 40 41 42 43 44 45 46
47 48 49 4A 4B 4C 4D 4E 4F 50
51 52 53 54 55 56 57 58 59 5A
5B 5C 5D 5E 5F 60 61 62

以 bytes_from_file 读取字节作为生成器:

def bytes_from_file(name):
with open(name, 'rb') as fp:
def read1(): return fp.read(1)
for bytes in iter(read1, b""):
for byte in bytes:
yield byte

x = bytes_from_file('out.fmt') #replaces x = range(1,99)

关于python - 横向排列十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10427830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com