用Python将大型二进制代码转换成文件
我一直在编写一个程序,我一直在尝试转换一个大的二进制文件(作为字符串)并将其打包成一个文件。我已经试了好几天使这件事成为可能。下面是我为打包这个大的二进制字符串而编写的代码用Python将大型二进制代码转换成文件,python,file,binary,Python,File,Binary,我一直在编写一个程序,我一直在尝试转换一个大的二进制文件(作为字符串)并将其打包成一个文件。我已经试了好几天使这件事成为可能。下面是我为打包这个大的二进制字符串而编写的代码 binaryRecieved="11001010101....(Shortened)" f=open(fileName,'wb') m=long(binaryRecieved,2) struct.pack('i',m) f.write(struct.pack('i',m)) f.close() quit() 这个错误留给我
binaryRecieved="11001010101....(Shortened)"
f=open(fileName,'wb')
m=long(binaryRecieved,2)
struct.pack('i',m)
f.write(struct.pack('i',m))
f.close()
quit()
这个错误留给我了
struct.pack('i',x)
struct.error: integer out of range for 'i' format code
我的整数超出了范围,所以我想知道是否有不同的方法来处理这个问题
谢谢在
struct.pack
中,您使用了表示整数的“i”,这是有限的。正如您的代码所述,您的输出很长;因此,您可能希望使用“d”而不是“i”,将数据打包为double。它应该会起作用。
有关更多信息,请参见。在
结构包中,您使用了表示整数的“i”,但该整数是有限的。正如您的代码所述,您的输出很长;因此,您可能希望使用“d”而不是“i”,将数据打包为double。它应该会起作用。
有关更多信息,请参阅。将位字符串转换为字节字符串:例如,请参阅此问题。然后用struct.pack('c',bytestring)
将位字符串转换为字节字符串:例如,请参见此问题。然后使用struct.pack('c',bytestring)
对字节进行打包,以便以大端顺序对m进行编码(如“十”在正常十进制使用中被写为“10”)。使用:
对于以小尾数顺序编码m
(如“十”在正常十进制中被写为“01”)使用:
这两个函数都处理数字-就像您在问题中所做的那样-因此返回的bytearray可能比预期的短(因为对于数字,前导零并不重要)
对于二进制数字字符串的精确表示(仅当其长度可除以8时才可能),您必须执行以下操作:
def as_bytes(s):
assert len(s)%8==0
out=bytearray()
for i in range(0,len(s)-8,8):
out.append(int(s[i:i+8],2))
return out
对于以大端顺序编码m(如“十”在正常十进制使用中被写为“10”),请使用:
对于以小尾数顺序编码m
(如“十”在正常十进制中被写为“01”)使用:
这两个函数都处理数字-就像您在问题中所做的那样-因此返回的bytearray可能比预期的短(因为对于数字,前导零并不重要)
对于二进制数字字符串的精确表示(仅当其长度可除以8时才可能),您必须执行以下操作:
def as_bytes(s):
assert len(s)%8==0
out=bytearray()
for i in range(0,len(s)-8,8):
out.append(int(s[i:i+8],2))
return out
我猜你是说m
而不是x
?在这种情况下,long
对于只支持整数的东西来说太多了我猜你的意思是m
而不是x
?在这种情况下,long
对于只支持整数的东西来说太多了。虽然double(几乎)不受数字大小的限制,但它们只能表示56位以下的整数。+jahbrohl你有其他选择吗?是的,请看我的回答。而double(几乎)不受数字大小的限制,它们只能表示56位以下的整数。+jahbrohl你有其他选择吗?是的,请看我的答案
def as_bytes(s):
assert len(s)%8==0
out=bytearray()
for i in range(0,len(s)-8,8):
out.append(int(s[i:i+8],2))
return out