2013-03-02 70 views
0

我試圖讀取使用的fread文件的碼流爲如何防止類型轉換過程中的數據丟失?

fread(buff, buffSize, 1, fp); 

buff is the buffer to which i am readingbuffSize is the size of buffer,和fp is the file pointer我正在閱讀。 將數據讀取到緩衝區後,我嘗試將緩衝區內容轉換爲另一個結構變量。結構形式

typedef struct data 
{ 
    char id; 
    short value1; 
    short value2; 
    .... 
}data; 

我所做的就是

data* var; 
var = (data*)buff; 

然後我試圖訪問該結構中的變量,如果比特流是像00 b0 11 c1 00如果是這樣的情況下, var->id0x00。和var->value10xb011var->value20xc100

但是我所得到的是

var->id = 0x00; 
var->value1 = 0x11c1; 
... 

它爲什麼我沒有收到預期? 當我將第一個參數類型改爲short時,值得到var->id was 0x00b0。 有沒有什麼像最小訪問量是2 Bytes? 如何解決這個問題? 我只想讀第一個字節到var->id字段。

回答

2

發生這種情況是因爲在value1之前有一個padding field,用於對齊。如果你想擺脫它,指示你的編譯器「打包」結構。每個編譯器有不同的語法。例如,對gcc你會說:

struct __attribute__ ((__packed__)) data { 
    /* ... */ 
}; 
+0

謝謝cnicutar ....這真的工作 – jithin 2013-03-02 21:35:16