焦炭

2012-10-22 53 views
1

的陣列中的存儲整我一直在閱讀此線程Store an int in a char array?焦炭

,我需要整型存儲字符的在數組中。

因此,我讀了前面的主題,並試圖做出自己的演示。但它不起作用,試圖弄清楚爲什麼不是很長時間。也許你可以給我一些線索或想法嗎?

#include <stdio.h> 

int main(void) { 

    char buffer[4]; 
    int y = 2200; 
    buffer[0] = (y >> 0) & 0xff; 
    buffer[1] = (y >> 8) & 0xff; 
    buffer[2] = (y >> 16) & 0xff; 
    buffer[3] = (y >> 24) & 0xff; 

    int x = buffer[0]; 

    printf("%i = %i\n", y, x); 
} 

輸出

gcc tmp.c && ./a.out 
2200 = -104 
+1

這不會直接解決您的問題,但請注意您對系統上「int」大小的假設。 –

回答

6
int x = buffer[0]; 

複製值在buffer[0],隱式轉換爲int,進入x。它不會將第一個sizeof int字節開頭的buffer解釋爲int,這正是您想要的(想想這種行爲會在常見場景中微妙地破壞的邪惡方式,即char c = 10; int x = c。糟糕!)。

認識到buffer[n]不返回內存地址,它返回一個char。爲了解釋sizeof int元素作爲一個整體int只投bufferint*第一個:

int x = *((int*)buffer); 

以及對於偏移n(在int秒爲單位,而不是char S):

int x = *((int*)buffer + n); 

另外請注意,您的代碼假定爲sizeof int == 4,但不能保證。

0

x = buffer[0]不會做你希望的東西。嘗試memcpy(&x,buffer,sizeof(x))。 (您需要添加#include <string.h>)的char