访问c中的整数字节

时间:2012-04-10 09:56:21

标签: c

我有12,13这样的值,我希望将其分配给单个整数示例k。 我尝试了以下程序,但我没有得到预期的结果。

enter code here
#include <stdio.h>
int main()
{

int k = 0;
printf("k address is %u\n", &k);
char* a = &k;
printf("%u\n", a);
*(a) = 12;
a++;
printf("%u\n", a);
*(a) = 13;
printf("k is %d\n",k);
return 0;
}

,输出为:

 k address is 3213474664
 3213474664
 3213474665
 k is 3340

2 个答案:

答案 0 :(得分:2)

在您的系统上,int显然以little-endian格式存储,因为13 * 256 + 12 = 3340。

答案 1 :(得分:1)

如果要以与字节无关的方式修改整数中的字节,则应使用shift和按位运算符。

例如,如果您尝试将IP地址1.2.3.4存储为32位整数,则可以执行以下操作:

unsigned int addr = (1 << 24) | (2 << 16) | (3 << 8) | 4;

这可以保证1是最重要的字节,依此类推。