2013-03-26 44 views
6

讀我必須用C語言編寫一個程序,從二進制文件以這種方式用Python寫的二進制文件用C

nCnt = 0; 
for (i=0;i<h.nsph;++i) { 
    fread(&gp,sizeof(struct gas_particle),1,fp); 
    if (bGas) { 
     kd->p[nCnt].iOrder = nCnt; 
     for (j=0;j<3;++j) kd->p[nCnt].r[j] = gp.pos[j]; 
     ++nCnt; 
     } 

    } 

讀取數據上面的代碼是不是程序的整個代碼我正在使用,但只有與我的問題相關的部分。我需要讀取nCnt粒子的位置,即每個粒子的座標。 我有一個蟒蛇陣列這些位置,它看起來像這樣

pos=array([[[ 0.4786236 , 0.49046784, 0.48877147], 
    [ 0.47862025, 0.49042325, 0.48877267], 
    [ 0.47862737, 0.49039413, 0.4887735 ], 
    ..., 
    [ 0.4785084 , 0.49032556, 0.48860968], 
    [ 0.47849332, 0.49041115, 0.48877266], 
    [ 0.47849161, 0.49041022, 0.48877176]]]) 

我應該怎麼寫這個數組中的二進制文件,使C代碼將精細讀呢?

+0

據推測這是一個'numpy'陣列? – 2013-03-26 11:30:06

+1

您是否檢查過此文件:http://stackoverflow.com/questions/807863/how-to-output-list-of-floats-to-a-binary-file-in-python(建議的解決方案使用http:// docs .python.org/2 /庫/ array.html)? – furins 2013-03-26 11:34:32

+0

難道你不想將數據串化爲通用性嗎?例如,您可以將其存儲在JSON中,在這種情況下,您不會依賴於排序或位數。 – 2013-03-26 11:41:39

回答

5

使用python模塊array和它的tofile() method以C可以讀取的格式或IO routines if you use numpy寫入數據。

隨着位數的數量,'f'格式(浮動)應該工作。

在C中,可以讀取每一行像這樣:

float values[3]; 
fread(values, sizeof(float), 3, fh); 
+0

-1,那不是C. – unwind 2013-03-26 12:06:20

+0

@unwind:什麼不是C? – 2013-03-26 12:31:00

+0

現在好多了,「價值」的奇怪聲明已經修復。但是,它缺少了'fread()'的參數,並且存在的參數以錯誤的順序給出。 – unwind 2013-03-26 12:37:03