このような構造体を言う:
typedef struct testVertex_s {
char *vert_name; //for test only...
float x;
float y;
float z;
}testvertex_t;
それをバイナリファイルに書き込む方法はpythonを使用しますか?cのfreadを使って読みたいです。
なぜそれはバイナリでなければならないのですか?テキストは簡単で、操作がはるかに簡単です。
本当にバイナリが必要な場合は、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文字列リテラルとして表されます)です。
この場合、もちろん文字列を動的に割り当てる必要がありますが、これは明らかなはずです。