焦炭

2012-10-22 52 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