2013-03-26 13 views
6

muszę używać program napisany w języku C, które odczytać dane z pliku binarnego w ten sposóbZapisywanie plików binarnych w python być odczytywane przez 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; 
     } 

    } 

Powyższy kod nie jest cały kod programu Używam, ale tylko część istotną dla mojego pytania. Muszę odczytać pozycje cząstek nCnt, tj. Współrzędnych każdej cząstki. mam te pozycje w tablicy Pythona, który wygląda tak

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]]]) 

Jak powinienem napisać tę tablicę w pliku binarnego tak, że kod C będzie ją przeczytać w porządku?

+0

Można przypuszczać, że jest 'numpy' tablica? –

+1

Czy sprawdziłeś to: http://stackoverflow.com/questions/807863/how-to-output-list-of-floats-to-a-binary-file-in-python (proponowane rozwiązanie używa http: // docs .python.org/2/library/array.html)? – furins

+0

Nie chcesz łączyć danych dla uniwersalności? Na przykład możesz przechowywać go w JSON, w takim przypadku nie będziesz zależał od endianness lub bitness. –

Odpowiedz

5

Użyj modułu Pythona array, a następnie tofile() method, aby zapisać dane w formacie, który C może odczytać lub IO routines if you use numpy.

Przy liczbie cyfr powinien działać format 'f' (zmienny).

W C, można przeczytać każdy wiersz tak:

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

-1, to nie jest C. – unwind

+0

@unwind: Czym konkretnie nie jest C? –

+0

Lepiej teraz, dziwna deklaracja "wartości" została naprawiona. Nadal brakuje argumentu "fread()", a argumenty, które są obecne, podane są w niewłaściwej kolejności. – unwind