在二进制文件中写入整数到python文件

时间:2014-12-01 22:38:29

标签: python python-3.x io binary integer

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

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

struct.pack("i", 6277101735386680763835789423176059013767194773182842284081)

这导致

ValueError: cannot fit 'int' into an index-sized integer

我尝试过其他一些格式(" l"," Q"),但这些也会导致错误:

struct.error: argument out of range

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

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

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

3 个答案:

答案 0 :(得分:2)

使用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)

输出:

$ python3 tiny.py
6277101735386680763835789423176059013767194773182842284081

答案 1 :(得分:1)

您可以使用

提取最低有效字节
  x = value & 0xFF

您可以使用

从数字中删除该字节
  value = value >> 8

重复此过程24次将为您提供字节。

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

 x = value & 0xFFFFFFFF
 value = value >> 32

您一次只处理4个字节。

答案 2 :(得分:0)

我最终使用了这样的东西:

def hexstring2bytes(a):
    return int(a, 16).to_bytes(len(a) // 2, byteorder='big')

hexwasm = "0061736d0100000001080260017c0060000002070101690166000003020101070501016500010a3801360044000000000000f03f4400000000000020409f440000000000c05840440000000000c05840a2a34400000000003c9140a2a310000b"

from pathlib import Path

Path("compute_pi.wasm").write_bytes(hexstring2bytes(hexwasm))

# the load that file into https://webassembly.github.io/wabt/demo/wasm2wat/

int(a, 16).to_bytes(len(a) // 2, byteorder='big')中,我将字符串的长度除以2,因为256(一个字节信息的大小)是16 ** 2(两个十六进制数字的信息的大小),< /p>