我一直在读这个线程在char数组中存储一个int?
我需要将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);
}
Run Code Online (Sandbox Code Playgroud)
产量
gcc tmp.c && ./a.out
2200 = -104
Run Code Online (Sandbox Code Playgroud)
int x = buffer[0];
Run Code Online (Sandbox Code Playgroud)
将charat 的值(buffer[0]隐式转换为int)复制到x.它不解释第一个sizeof int字节开始buffer作为int,这是你想要的(认为的恶行,这种行为会潜移默化地在常见的场景突破,即char c = 10; int x = c.哎呀!).
意识到buffer[n]不返回内存地址,它返回一个char.要将sizeof int元素解释为一个整体,int只需将其buffer转换为int*第一个:
int x = *((int*)buffer);
Run Code Online (Sandbox Code Playgroud)
并且对于偏移量n(以ints计,而不是chars):
int x = *((int*)buffer + n);
Run Code Online (Sandbox Code Playgroud)
另请注意,您的代码假定sizeof int == 4,但不保证.