Struct.error:解压缩需要16个字节的缓冲区

时间:2018-06-29 23:34:49

标签: python-3.x

我有一个格式为(b'A\xd9\xa5\x1ab\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x0b\xda\xa5\x1ab\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\xcd\xdb\xa5\x1ab\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\xff\xdb\xa5\x1ab\x00\x00\x00\x05\x00\x00\x00\x01\x00\x00\x00\xe9\xdc\xa5\x1ab\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\xf7\xdc\xa5\x1ab\x00\x00\x00\x08\x00\x00\x00\x02\x00\x00\x00\x1b\xdd\xa5\x1a')的二进制文件,我将该文件作为用户输入并在read_file变量(类字节对象)中读取该文件。我需要将其转换为使用整数模式(int,int,int,int)每个int 4字节的ascii。我尝试使用struct库来解压缩它。我编写了以下命令,但它给了我以下错误:

错误

print(unpack("IIII", read_file))
struct.error: unpack requires a buffer of 16 bytes

代码

    for (dirpath, dirnames, filenames) in walk('/Users/amathur1/PycharmProjects/learningpython/NAWF_VRG_G'):
        count = 1
        for file in filenames:
            print(count, " : ", file)
            count = count + 1
        print("select file you want to convert")
        input_file = input()
        print("Selected file number is : ", input_file)

        #To open the selected file
    with open(dirpath + "/" + filenames[int(input_file) - 1], 'rb') as file:
        # Reading the selected file i.e. file
        read_file = file.read()
    print(unpack("IIII", read_file))

2 个答案:

答案 0 :(得分:1)

您的文件似乎大于4个整数(16个字节)的大小;如您所说,如果需要转换每组4个int的 ,则必须将文件中的数据分解为一系列大小相同的块。

答案 1 :(得分:0)

如果您使用损坏的文件或文件扩展名错误的文件,也会出现该错误。如果您以错误的方式在文件格式之间进行转换,也会发生这种情况。例如,如果将其名称带有.ico文件扩展名的png文件交给它,显然会感到困惑。