Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python将二进制整数写入文件_Python_Python 3.x_Io_Binary_Integer - Fatal编程技术网

用python将二进制整数写入文件

用python将二进制整数写入文件,python,python-3.x,io,binary,integer,Python,Python 3.x,Io,Binary,Integer,在Python 3中,如何将整数写入二进制文件 例如,我想将627710173538668076383587894231760590137671947731828282284081写入一个正好24字节的二进制文件(无符号,我将只处理正整数)。我该怎么做?我尝试了以下方法: struct.pack("i", 6277101735386680763835789423176059013767194773182842284081) i = 6277101735386680763835789423176

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

例如,我想将627710173538668076383587894231760590137671947731828282284081写入一个正好24字节的二进制文件(无符号,我将只处理正整数)。我该怎么做?我尝试了以下方法:

struct.pack("i", 6277101735386680763835789423176059013767194773182842284081)
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)
这导致

ValueError: cannot fit 'int' into an index-sized integer
我也尝试过其他一些格式(“l”、“Q”),但这些格式也会导致错误:

struct.error: argument out of range
如果我能将整数转换为24个字节,我就能够写入文件,因为我知道怎么做。但是,我似乎无法将整数转换为字节

另外,如何确保每个整数写入24个字节?我也会写更小的数字(100020001598754,12),但是这些也需要24字节


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

您可以使用

  x = value & 0xFF
您可以使用

  value = value >> 8
重复此过程24次将得到字节数

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

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

您一次处理4个字节。

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

struct.pack("i", 6277101735386680763835789423176059013767194773182842284081)
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

可能想做
chr(value&0xFF)
,但是我删除了我的答案,支持这个答案(并且+1'd you)(因为我的答案是错误的……我没有真正正确地阅读这个问题),为什么不需要指出应该从文件中读取24个字节?byteorder=“big”是否已经表明了这一点?不,读取部分没有限制。文件内容将转换为数字。如果只想读取前24个字节,请将
file.read()
替换为
file.read()[:24]
byteorder='big'
是一种关于如何存储数字的约定,byteorder=“big”确切表示什么?这意味着如果在十六进制编辑器中打开文件并看到0xFF 0x00,则表示您已编写0xFF00(65280),删除“byteorder=”big”参数将使脚本以“正常”二进制格式写入文件?因为这就是我想要的(00000000=0,00000001=1,00000010=2,00000011=3,等等),或者“byteorder=”big“已经这样做了吗?