我一直在阅读这个帖子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
答案 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>
。)