1

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

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

所以我阅读了上一个帖子,并尝试制作自己的演示。但它不起作用,试图弄清楚为什么不这样做很长时间。也许你可以给我一些线索或想法吗?

#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
4

2 回答 2

6
int x = buffer[0];

char将at的值(buffer[0]隐式转换为 int)复制到 中x。它不会解释以sizeof int开头的第一个字节bufferint这是您想要的(想想这种行为在常见情况下会巧妙地破坏的邪恶方式,即char c = 10; int x = c. 哎呀!)。

意识到它buffer[n]不返回内存地址,它返回一个char. 要将sizeof int元素解释为一个整体int,只需buffer转换为int*第一个:

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

对于偏移量n(以ints 为单位,而不是chars):

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

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

于 2012-10-22T23:51:24.953 回答
0

x = buffer[0]不做你想做的事。试试memcpy(&x,buffer,sizeof(x))。(您需要添加#include <string.h>。)

于 2012-10-22T23:49:10.913 回答