在char数组中存储整数

时间:2012-10-22 23:47:10

标签: c arrays types

我一直在阅读这个帖子Store an int in a char array?

我需要将int存储在chars数组中。

所以我读了之前的帖子,我试着制作自己的演示。但它没有用,试图弄清楚为什么不长久。也许你可以给我一些线索或想法吗?

#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

2 个答案:

答案 0 :(得分:6)

int x = buffer[0];

将隐式转换为int的char 的值buffer[0]复制到x。它不会将sizeof int开头的buffer字节解释为int,这就是你想要的(想想这种行为在常见场景中会巧妙地破解的邪恶方式,即char c = 10; int x = c。糟糕!)。

意识到buffer[n]没有返回内存地址,它返回char。要将sizeof int元素解释为一个整体int,只需先将buffer投射到int*

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

对于偏移量n(以int s衡量,而不是char s):

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

另请注意,您的代码假定为sizeof int == 4,但无法保证。

答案 1 :(得分:0)

x = buffer[0]没有按你的意愿行事。试试memcpy(&x,buffer,sizeof(x))。 (您需要添加#include <string.h>。)