将二进制整数写入python中的文件

Das*_*man 4 python io binary integer python-3.x

如何在 Python 3 中以二进制形式将整数写入文件?

例如,我想将 6277101735386680763835789423176059013767194773182842284081 以正好 24 个字节的二进制文件写入文件(无符号,我将只使用正整数)。我怎样才能做到这一点?我尝试了以下方法:

struct.pack("i", 6277101735386680763835789423176059013767194773182842284081)
Run Code Online (Sandbox Code Playgroud)

这导致

ValueError: cannot fit 'int' into an index-sized integer
Run Code Online (Sandbox Code Playgroud)

我对其他一些格式(“l”、“Q”)也尝试过同样的方法,但这些也会导致错误:

struct.error: argument out of range
Run Code Online (Sandbox Code Playgroud)

如果我可以将整数转换为恰好 24 个字节,我将能够写入文件,因为我知道如何做到这一点。但是,我似乎无法将整数转换为字节。

另外,如何确保每个整数正好写入 24 个字节?我还将编写较小的数字(1000、2000、1598754、12),但是这些也应该占用 24 个字节。

之后如何从文件中再次读取整数?

Ant*_*nko 8

使用 Python 3,您可以执行以下操作:

i = 6277101735386680763835789423176059013767194773182842284081
with open('out.bin', 'wb') as file:
    file.write((i).to_bytes(24, byteorder='big', signed=False))

with open('out.bin', 'rb') as file:
    j = int.from_bytes(file.read(), byteorder='big')

print(j)
Run Code Online (Sandbox Code Playgroud)

输出:

$ python3 tiny.py
6277101735386680763835789423176059013767194773182842284081
Run Code Online (Sandbox Code Playgroud)


650*_*502 1

您可以使用以下命令提取最低有效字节

  x = value & 0xFF
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令从数字中删除该字节

  value = value >> 8
Run Code Online (Sandbox Code Playgroud)

重复此过程 24 次即可得到字节。

您还可以通过取出更多字节来加速此过程,例如使用

 x = value & 0xFFFFFFFF
 value = value >> 32
Run Code Online (Sandbox Code Playgroud)

你一次处理 4 个字节。