2013-03-26 36 views
6

tôi phải sử dụng một chương trình viết bằng C mà đọc dữ liệu từ một tập tin nhị phân theo cách nàyViết tập tin nhị phân trong python để được đọc bởi 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; 
     } 

    } 

Đoạn mã trên không phải là toàn bộ mã của chương trình Tôi đang sử dụng nhưng chỉ một phần có liên quan cho câu hỏi của tôi. Tôi cần đọc các vị trí của các hạt nCnt, tức là tọa độ của từng hạt. Tôi có những vị trí trong một mảng python, trông như thế này

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

Làm thế nào tôi nên viết mảng này trong một tập tin nhị phân để mã C sẽ đọc nó tốt?

+0

Có lẽ đó là một 'mảng numpy'? –

+1

Bạn đã kiểm tra điều này: http://stackoverflow.com/questions/807863/how-to-output-list-of-floats-to-a-binary-file-in-python (giải pháp được đề xuất sử dụng http: // docs .python.org/2/library/array.html)? – furins

+0

Bạn có muốn xâu chuỗi dữ liệu của mình cho tính phổ quát không? Ví dụ, bạn có thể lưu trữ nó trong JSON, trong trường hợp đó bạn sẽ không phụ thuộc vào độ tin cậy hoặc bit. –

Trả lời

5

Sử dụng mô-đun trăn array và đó là tofile() method để ghi dữ liệu ở định dạng mà C có thể đọc hoặc IO routines if you use numpy.

Với số chữ số, định dạng 'f' (phao) sẽ hoạt động.

Trong C, bạn có thể đọc từng dòng như vậy:

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

-1, đó không phải là C. – unwind

+0

@unwind: Điều gì đặc biệt không phải là C? –

+0

Bây giờ tốt hơn, việc khai báo các giá trị 'lạ 'đã được sửa. Tuy nhiên, nó thiếu một đối số cho 'fread()' và các đối số hiện diện được đưa ra theo thứ tự sai. – unwind

Các vấn đề liên quan