2014-02-27 27 views
1

我寫一些代碼,簡單地寫入double數組爲二進制文件使用的fwrite寫1D陣列作爲單個塊與逐元素

#include<stdio.h> 

void main(void) { 
    // Open binary files 
    FILE *pFileResultsBin1; 
    FILE *pFileResultsBin2; 
    pFileResultsBin1 = fopen("results1.bin","wb+"); 
    pFileResultsBin2 = fopen("results2.bin","wb+"); 
    // Create array 
    double arr[3]; 
    arr[0] = 1.0; 
    arr[1] = 2.0; 
    arr[2] = 3.0; 
    // Write array to binary files 10 times 
    int i; 
    // Method using sizeof(arr) 
    for(i=0;i<10;i++){ 
     fwrite(&arr, sizeof(arr),1,pFileResultsBin1) 
    } 
    // Method using sizeof(arr[0]) 
    for(i=0;i<10;i++){ 
     fwrite(&arr, sizeof(arr[0]),3,pFileResultsBin2) 
    } 
    // Close files 
    fclose(pFileResultsBin1); 
    fclose(pFileResultsBin2); 
} 

當讀取示例互聯網用於寫入陣列上通常使用sizeof(arr[0])的方法,但在使用sizeof(arr)時有沒有什麼缺點?我想這兩種方法,並且都使用MATLAB正確讀取:

FID1 = fopen(result1.bin); 
FID2 = fopen(result1.bin); 
A = fread(FID1,[3 inf],'*double','ieee-le'); 
B = fread(FID2,[3 inf],'*double','ieee-le'); 

親切的問候,

EJG

PS。我沒有嘗試編譯這個特定的例子,因爲我在沒有編譯器的計算機上。

回答

1

您的第一個循環會將整個數組寫入10次。除了不便於移動(另一臺計算機可能不按照相同的順序存儲陣列元素,但我認爲這不太可能),將整個陣列寫入1鏡頭就可以了

+0

確實有可能計算機不會將數組元素存儲在有序的內存位置,因爲索引是? – EJG89

+0

一個單詞中字節的順序更可能是不同的(大vs小端),但問題是可能的(儘管我不知道任何特定的機器會顯示它)。 –