2013-05-08 63 views
0

Im'm加載像素的顏色並寫入一個單字節變量。當我想要讀取這種顏色(對於紅色像素)應該得到結果:255但是,該值爲:4294967296.由此得出該值已記錄在32字節變量中。爲什麼會發生?C從位圖讀取顏色

struct RGBpix{ 
char R; 
char G; 
char B; 
}typedef RGB; 

...

RGB **data=(RGB **)malloc(sizeof(RGB *)*Picture.biWidth); 
    for(i = 0; i < Picture.biWidth; i++){ 
     data[i] = (RGB*) malloc(sizeof(RGB) *Picture.biHeight); 
    } 

...

for(i=0;i<Picture.biWidth;i++){ 
     for(j=0;j<Picture.biHeight;j++){ 

     fread(&data[i][j].R, 1, 1,bmpFile); 
     fread(&data[i][j].G, 1, 1,bmpFile); 
     fread(&data[i][j].B, 1, 1,bmpFile); 
     } 

    } 
    printf("%Ld", data[0][1].R); 
+1

***'void *'的Dat kast !!! *** – 2013-05-08 18:18:08

+0

printf()的格式說明符無效,並導致未定義的行爲。 'L'標誌只對a,A,e,E,f,F,g或G轉換說明符有效,並告訴'printf()'參數是'long double'。嘗試將其更改爲'printf(「%d \ n」,data [0 - ] [1] .R)'並查看會發生什麼。 – 2013-05-08 20:55:37

回答

0

char似乎是你的機器上有符號類型。使用unsigned char來避免符號擴展。