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 となります。