2012-04-10 24 views
-1

私は12,13のような値を持っています。 私は次のプログラムを試しましたが、期待した結果が得られません。cの整数のバイトにアクセスする

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 
+1

13 * 256 + 12 = 3340あなたは何を期待していましたか? –

+0

私はIPアドレスが128.99.1.20で、これはcharポインタだと思いますが、今は ' a、b、c、dのような別々のint変数で12899120として得ました。 – user954299

+0

質問を編集して、実際の質問(達成したいこと)が含まれるようにしてください。 –

答えて

1

変更したい場合は、int Sは明らかに、little-endian形式で保存されていますバイトを整数にエンディアンに依存しない方法で使用するには、シフトとビット演算子を使用する必要があります。例えば

、あなたは32ビットの整数に1.2.3.4のIPアドレスを保存しようとしていた場合、あなたができる:

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

これは1は等々最上位バイトであるとことを保証。

2

理由* 256 13 + 12 = 3340

関連する問題