Python在二进制fi中写入特定数量的字节

2024-09-29 17:16:52 发布

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

抱歉,如果这是一个重复的问题,我是相当新的python和不完全知道的术语,所以很难寻找解决方案。你知道吗

我正在尝试编写一个代码,以特定的整数格式输出二进制文件,即8位的部分,后跟32位,等等。更具体地说,以STL格式;可以在这里阅读大纲:wikipedia。你知道吗

我试过做一个简单的f.write(struct.pack(DATA))来生成一个输出文件,但是最终的结果是一个损坏的文件。STL确实有一个ASCII版本;我正在使用它。因此,我假设二进制文件生成有问题。我想使用二进制文件来显著减小文件大小。你知道吗

我假设输出代码如下*:

import struct
    f = open('cool_filename.stl', 'wb')
    f.write(struct.pack(head, format=UINT8))
    f.write(struct.pack(num, format=UINT32))
    for i in range(0, num):
        f.write(struct.pack(normal, format=REAL32))
        f.write(struct.pack(vert1, format=REAL32))
        f.write(struct.pack(vert2, format=REAL32))
        f.write(struct.pack(vert3, format=REAL32))
        f.write(struct.pack(attr, format=UINT16))
    f.close()

有用的链接:

struct.pack docs

format specs

我相信答案可以在上面的后一个链接中找到,但我真的不知道如何使用它。接下来,我尝试使用struct.pack(I32, DATA)来格式化无符号32字节的部分,其余部分使用类似的代码,但没有效果。你知道吗

*我应该注意的是,这不会运行。这里的代码显示格式更改


Tags: 文件代码formatdata链接格式二进制解决方案
1条回答
网友
1楼 · 发布于 2024-09-29 17:16:52

struct.pack的第一个参数应该是一个字符串,I格式规范意味着32位(文档中表中的size=4表示4字节,即4*8=32位),因此要以小尾数字节顺序写入单个32位无符号整数(比如4711),您可以执行struct.pack('<I', 4711)。你知道吗

相关问题 更多 >

    热门问题