2011-09-15 37 views
0

二進制文件我想測試一些數據寫入到文件中。寫uint16_t與ofstream的

sixteenBitData = (uint16_t*) malloc(sizeof(uint16_t)*bufSizeX*bufSizeY); 
memset(sixteenBitData, 1, sizeof(uint16_t)*bufSizeX*bufSizeY); 
binfile->write((char *)&sixteenBitData, sizeof(uint16_t)*bufSizeX*bufSizeY); 

,你可以看到,sixteenBitData是uint16_t數組

我希望我的二進制文件,有一堆1的,但是當我在加載到MATLAB,它似乎有不同0到65535

之間的數字我是不是做錯了什麼?

感謝

回答

0

memset INF sixteenBitData爲1將不設置陣列1中的每個部件,但257.更重要的是,你正在寫的陣列爲二進制,並MATLAB打開文件的二進制或文本?

+0

你在問題 – Derek

5

1)sixteenBitData是一個指針。當你寫,你帶指針是某處在堆棧上的地址,然後將其轉換成一個char *,並有寫的一切到您的文件。我很驚訝它沒有崩潰。

2)memset的設置每個字節一個的值。因爲(我認爲)uint16_t是兩個字節,它越來越設置爲0x0101,這是257

sixteenBitData = (uint16_t*) malloc(sizeof(uint16_t)*bufSizeX*bufSizeY); 
for(int i=0; i<bufSizeX*bufSizeY; ++i) 
    sixteenBitData[i] = 1; //obvious replacement here 
binfile->write((char *) sixteenBitData, sizeof(uint16_t)*bufSizeX*bufSizeY); 
        ^
         & removed 
+0

他不是取消引用指針correct..my錯誤,他走了地址。但你是對的,'&'不應該在那裏。 – interjay

+0

呃,哎呀。你是對的。 –

+0

哇 - 感謝這麼多!這讓我整天煩惱不已。刪除&做了竅門。 – Derek