-1

単一の整数の例kに割り当てたい12、13のような値があります。次のプログラムを試しましたが、期待どおりの結果が得られません。

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
4

2 に答える 2

2

お使いのシステムでは、13*256 + 12 = 3340 であるため、 ints は明らかにリトル エンディアン形式で格納されています。

于 2012-04-10T09:59:05.223 に答える
1

エンディアンに依存しない方法で整数のバイトを変更する場合は、シフトおよびビット演算子を使用する必要があります。

たとえば、1.2.3.4のIPアドレスを32ビット整数に格納しようとした場合、次のことができます。

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

1これにより、それが最上位バイトなどであることが保証されます。

于 2012-04-10T10:22:48.660 に答える