16進数の順番について
Posted: 2007年2月06日(火) 17:50
こちらの不手際で次の質問欄に書き込みします。
始めまして、独学でC言語を勉強してる物ですが、
コンピューターの中の16進数の事があまり良く分からないので教えてください。
PCはDELLのディメンション8300です。
コンパイラはMicrosoft Visual C++ .NET 55577-640-4383485-18159
説明不足だと思いますが、以下の状況(16進数のPCの中での順番が分からない)です。
#include<stdio.h>
#include<stdlib.h>
int main(void){
char ss[/url]="ABCDEF";
void *vpt;
int idt;
vpt=ss; //Aを指しているポインタ
idt=*(char *)vpt;
printf("char:%X\n",idt);
idt=*(int *)vpt;
printf("int :%X\n\n",idt);
{//変数を新たに宣言するためのブロック
int dt=0x41424344;
int *ip;
char *cp;
ip=&dt;
cp=(char *)ip;
printf("%x\n",*ip);
printf("%x\n",*cp++);
printf("%x\n",*cp++);
printf("%x\n",*cp++);
printf("%x\n",*cp++);
}
return(EXIT_SUCCESS);
}
=============実行結果===============================================
char:41 ←これは分かる
int :44434241 ←この行以下なんでこの順番なのかが分からない
41424344
44
43
42
41
Press any key to continue[color=40D0FF]char[/color] ss[/url] = "ABCDEF";
ここの ss のアドレスが 仮に 100番地だったとしましょう。
その場合
番地: 100 101 102 103
値 : 0x41 0x42 0x43 0x44
となります。
int idt = *((int *)ss);
上記のようにint型のidtにキャストした場合、リトルエンディアンだと
idtの0バイト目:0x41(100番地)
idtの1バイト目:0x42(101番地)
idtの2バイト目:0x43(102番地)
idtの3バイト目:0x44(103番地)
になるので
対応するバイト: 3210
↓↓↓↓
idt == 0x44434241
となります。
自分で説明していて、わかりづらいな~とは思うのですけど
この説明でわかりますでしょうか?
なおビッグエンディアンの場合は、キャストした際に
idtの0バイト目:0x44(103番地)
idtの1バイト目:0x43(102番地)
idtの2バイト目:0x42(101番地)
idtの3バイト目:0x41(100番地)
になるので
対応するバイト: 3210
↓↓↓↓
idt == 0x41424344
となります。