0

抱歉,如果这是一个重复的问题,我对 python 还很陌生,并不完全了解命名法,因此很难寻找解决方案。

我正在尝试编写以特定整数格式输出二进制文件的代码,即 8 位的部分,然后是 32 位等。更具体地说,以 STL 格式;可以在此处阅读大纲:维基百科

我尝试过简单f.write(struct.pack(DATA))地生成输出文件,但最终结果是文件损坏。STL 确实有 ASCII 版本。我有工作。因此我认为二进制文件生成有问题。我想使用 Binary 来显着减小文件大小。

我假设输出代码看起来像这样*:

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 文档

格式规范

相信可以在上面后面的链接中找到答案,但是我不太明白怎么用。在它之后,我尝试使用struct.pack(I32, DATA)to 格式化无符号的 32 字节部分,并为其余部分使用类似的代码,但它不起作用。

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

4

1 回答 1

0

的第一个参数struct.pack应该是一个字符串,I格式规范意味着 32 位(文档中表格中的 size=4 表示 4 个字节,即 4*8=32 位),所以要写一个 32 位无符号整数(比如说 4711) 以 little-endian 字节顺序,你会做struct.pack('<I', 4711).

于 2019-10-30T07:30:38.613 回答