掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29713

16進数の順番について
投稿者---parapara(2007/02/06 17:55:24)


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



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:16進数の順番について 29714 asd 2007/02/06 18:01:05


No.29714

Re:16進数の順番について
投稿者---asd(2007/02/06 18:01:05)


>掲示板利用宣言
>マルチポスト(多重投稿)はしません。
http://www.play21.jp/board/formz.cgi?action=res&resno=4313&page=&id=dixq&rln=4313

向こうもマルチポストは禁止されているようですが、初めてなのならせめてその掲示板を利用する上でのお約束は守りましょうよ。

ということで、投稿を削除するのではなくどちらかのスレ一本に絞り解決したら両方のスレに解決方法の報告をお願いしますね。

もう一度言っておきます。
レスがついた投稿は削除しちゃダメですよ。

><pre>始めまして、独学で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[]=<font color="#0000ff">"ABCDEF"</font>;
void *vpt;
int idt;

vpt=ss; <font color="#009900">//Aを指しているポインタ
</font>
idt=*(char *)vpt;
printf(<font color="#0000ff">"char:%X\n"</font>,idt);
idt=*(int *)vpt;
printf(<font color="#0000ff">"int :%X\n\n"</font>,idt);

{<font color="#009900">//変数を新たに宣言するためのブロック
</font>
int dt=0x41424344;
int *ip;
char *cp;
ip=&dt;
cp=(char *)ip;
printf(<font color="#0000ff">"%x\n"</font>,*ip);
printf(<font color="#0000ff">"%x\n"</font>,*cp++);
printf(<font color="#0000ff">"%x\n"</font>,*cp++);
printf(<font color="#0000ff">"%x\n"</font>,*cp++);
printf(<font color="#0000ff">"%x\n"</font>,*cp++);
}
return(EXIT_SUCCESS);
}
=============実行結果===============================================
char:41 ←これは分かる
int :44434241 ←この行以下なんでこの順番なのかが分からない

41424344
44
43
42
41
Press any key to continue
</pre>



この投稿にコメントする

削除パスワード

No.29715

Re:16進数の順番について
投稿者---kolona(2007/02/06 18:24:13)


多分「エンディアン」の問題かと。
URL
URL2

お使いのパソコンのCPU次第でしょう


この投稿にコメントする

削除パスワード

No.29717

Re:16進数の順番について
投稿者---parapara(2007/02/06 19:03:56)


>多分「エンディアン」の問題かと。
私もリトルエンディアンのことだと思いますが。
それが具体的に私のソースコードと直接どういう風に関係しているのか知りたいのです。それを詳解してる書籍などでも教えていただけると、幸いです。今使っている書籍は、このホームページでも紹介されている”シニア編”です。


この投稿にコメントする

削除パスワード

No.29731

Re:16進数の順番について
投稿者---RiSK(2007/02/07 10:39:13)


# char=>1byte=8bit, int=>4byte=32bitと仮定。
# 多少,正確でない表現を用いています。

まず,'A' が ASCII において 0x41 なのはOKですか?


> char ss[]="ABCDEF";
      |                   ss                    |
  文字| 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | '\0'|
16進値|  41 |  42 |  43 |  44 |  45 |  46 |   0 |
      | char|
      |          int          |

リトルエンディアンではbyte列 0x41 0x42 0x43 0x44 をint値 0x44434241 と見なすことができます。
# そして,それがリトルエンディアンたる所以


> int dt=0x41424344;

は32bit(4byte)値で,8bit(1byte)ずつ区切られメモリ上に 0x44 0x43 0x42 0x41 の順で配置されます。
この 0x44 0x43 0x42 0x41 を int値と見なせば 0x41424344 であり,
char値と見なせば 0x44 0x43 0x42 0x41 の列です。
ポインタを進めていけば,0x44→0x43→0x42→0x41と参照できます。


この投稿にコメントする

削除パスワード

No.29732

Re:16進数の順番について
投稿者---parapara(2007/02/07 12:14:19)


疑問が氷解しました。的確なアドバイスありがとうございます。


この投稿にコメントする

削除パスワード

No.29716

Re:16進数の順番について
投稿者---parapara(2007/02/06 18:58:24)


>>掲示板利用宣言
>>マルチポスト(多重投稿)はしません。
マルチポストの意味初めて知りました。深く反省します。ごめんなさい。
>レスがついた投稿は削除しちゃダメですよ。
レスがついた投稿は削除した事ないです。


この投稿にコメントする

削除パスワード

No.29730

Re:16進数の順番について
投稿者---asd(2007/02/07 09:53:01)


>>>掲示板利用宣言
>>>マルチポスト(多重投稿)はしません。
>マルチポストの意味初めて知りました。深く反省します。ごめんなさい。

いえいえ、ちゃんと事後処理をしていただければそれでいいかと思いますよ。

>>レスがついた投稿は削除しちゃダメですよ。
>レスがついた投稿は削除した事ないです。
その姿勢はいいですね。
が、向こうで解決したらその旨をこちらにも書いておくと良かったと思います。(今書いているところなのかもですが^^;)
(マルチポスト先を見るまでまだ悩んでいるのかと思ってしまいますから)


この投稿にコメントする

削除パスワード

No.29733

Re:16進数の順番について
投稿者---parapara(2007/02/07 12:16:11)


すいませんでした。完全に理解できてなかったので、もう少し粘ってみようかと思った次第です。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧