在char数组中存储整数

Jan*_*cak 1 c arrays types

我一直在读这个线程在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)

Ed *_* S. 6

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,但不保证.