16進数の順番について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
parapara

16進数の順番について

#1

投稿記事 by parapara » 18年前

こちらの不手際で次の質問欄に書き込みします。

parapara

16進数の順番について===訂正===

#2

投稿記事 by parapara » 18年前

始めまして、独学で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

parapara

Re:16進数の順番について===訂正===

#3

投稿記事 by parapara » 18年前

禁止事項だとは知らずにマルチポスト(の言葉自体知らなかった)してしまいました。
深く反省しましたが、何卒どうか質問にお答えください。

parapara

Re:16進数の順番について===訂正===

#4

投稿記事 by parapara » 18年前

リトルエンディアンのことだと思いますが。
それが具体的に私のソースコードと直接どういう風に関係しているのか知りたいのです。それを詳解してる書籍などでも教えていただけると、幸いです。今使っている書籍は、”林 晴比古のシニア編”です。

GPGA

Re:16進数の順番について===訂正===

#5

投稿記事 by GPGA » 18年前

[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

となります。

parapara

Re:16進数の順番について===訂正===

#6

投稿記事 by parapara » 18年前

これ以上がない位的確に詳細に教えてもらえたと思います。
しかし難しくてなかなか理解できず、暫く理解するために考えてみる事にします。
本当にありがとうございました。

(報告)

Re:16進数の順番について===訂正===

#7

投稿記事 by (報告) » 18年前

既に解決済みですがマルチポスト先をリンクさせておきます。
http://www2.realint.com/cgi-bin/tarticl ... intc+29713

閉鎖

“C言語何でも質問掲示板” へ戻る