Python中的大二进制代码

2024-05-19 11:02:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在做一个程序,我一直试图转换一个大的二进制文件(字符串)并将其打包成一个文件。我几天来一直在努力使这件事成为可能。这是我写的打包大二进制字符串的代码。

binaryRecieved="11001010101....(Shortened)"
f=open(fileName,'wb')
m=long(binaryRecieved,2)
struct.pack('i',m)
f.write(struct.pack('i',m))
f.close()
quit()

我只剩下这个错误了

^{pr2}$

我的整数超出范围,所以我想知道是否有其他方法来处理这个问题。

谢谢


Tags: 文件字符串代码程序close二进制openfilename
3条回答

把你的位串转换成字节串:例如请看这个问题Converting bits to bytes in Python。然后用struct.pack('c', bytestring)压缩字节

对于按高位顺序对m进行编码(例如在正常十进制中“10”被写成“10”),请使用:

def as_big_endian_bytes(i):
    out=bytearray()
    while i:
        out.append(i&0xff)
        i=i>>8
    out.reverse()
    return out

对于按小尾数顺序编码m(例如在正常十进制用法中“ten”被写成“01”),请使用:

^{pr2}$

这两个函数都对数字起作用—就像您在问题中所做的那样—所以返回的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

struct.pack中,您使用了表示整数的“i”,它是有限的。正如您的代码所述,您的输出很长;因此,您可能希望使用“d”代替“i”,将数据打包成两倍。它应该有用。

有关详细信息,请参见Python struct。在

相关问题 更多 >

    热门问题