2012-12-14 57 views
2

說,像這樣的結構:如何使用可以在c中讀取的python編寫二進制結構?

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

如何編寫一個二進制文件使用Python?我想用c中的fread讀取它;

+1

在您的程序之外定義的結構中有char *是否真的有意義?它如何指向任何有用的東西? – c0m4

回答

7

爲什麼它必須是二進制的?文本是微不足道的,而且更容易與之交互。

如果您確實需要二進制文件,請使用struct模塊。請務必定義您的字節順序,並分別讀取中的每個字段中的C,do 而不是嘗試將單個fread()變成C結構。

你可以做包裝,像這樣:

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結尾的字符串,由花車緊隨其後。從上面得到的數據是"hello\x00\xc3\[email protected]\xa4p<B\x00\x00\x88A"(表示爲Python字符串文字)。

對於這種情況,您將需要動態分配當然應該是顯而易見的字符串。

+0

如何處理二進制文件中的變長字符串? –

+1

@GrijeshChauhan您可以在字符串之後寫出nul終止符,也可以在字符串之前寫出一個n字節的長度。 – simonc

+0

@GrijeshChauhan我用0-終止作爲結束標記。 – unwind

相關問題