2

このような構造体を言う:

typedef struct testVertex_s {
       char *vert_name; //for test only...
       float x;
       float y;
       float z;
}testvertex_t;

それをバイナリファイルに書き込む方法はpythonを使用しますか?cのfreadを使って読みたいです。

4

1 に答える 1

8

なぜそれはバイナリでなければならないのですか?テキストは簡単で、操作がはるかに簡単です。

本当にバイナリが必要な場合は、structモジュールを使用してください。エンディアンを定義し、Cで各フィールドを個別に読み取るようにしてください。また、C構造体にシングルを入れようとしないでください。fread()

あなたはそのようにパッキングをすることができます:

import struct
out = open("myvertex.bin", "wb")
string = "hello"
fmt = "<%usfff" % (1 + len(string))
out.write(struct.pack(fmt, string, 3.14, 47.11, 17))

これにより、文字列が0で終了するプレーンな文字列として書き込まれ、その直後にfloatが続きます。上記の結果のデータは"hello\x00\xc3\xf5H@\xa4p<B\x00\x00\x88A"(Python文字列リテラルとして表されます)です。

この場合、もちろん文字列を動的に割り当てる必要がありますが、これは明らかなはずです。

于 2012-12-14T10:58:12.463 に答える