プロが教えるわが家の防犯対策術!

c言語でのヘキサコードの標準入出力とファイルへの入出力
を人に聞かれましたが、ヘキサコード自体がなんだかわからなくて。
16進数?迄はネットで調べたんですが、
文字や数字の16進数表記ということでしょうか?

実際、標準入出力とファイルへの入出力の方法、そして、
ヘキサコードのヘキサの部分の英語のつづりを教えてください。
どう便利なんでしょうか?どういった場合に使うんでしょうか?
少しでもわかることがあれば助けてください

ヘキサコード自体がよくわからず質問をしているので
トンチンカンな事を言っていたらごめんなさい。

A 回答 (3件)

なかなかねばりますね。



わたしも、Cの参考書広げなくちゃならなくなりそうです。(汗)

>すみませんバイナリーモードのオープンってどうやるんでしょうか?
fii=fopen("hexa.dat","w");

fii=fopen("hexa.dat","wb");
ですね。
>10進数の123は16進数に変換されましたが、
>他はされたんでしょうか?
>文字の場合は、文字コードが16進数になったとかですかね。
そうですね。scanf("%x",&a); だと16進になっていますね。
10進入力から16進変換したい場合は、このコーディングだと
scanf("%d",&a);とやるか、書式付でscanf("%3d",ch);とかでしょう。

>2進数や8進数は何コードで%何でしょうか?
8進数は’%o’→OCTのOですね。2進数は…、忘れちゃいました。めったにというか使ったこと無いんで(^^);たしか、%bでよかったのかなあ?m(__)m  
    • good
    • 1

初めまして。



#1さんの回答とダブル部分もありますが、ご容赦ください。

>文字や数字の16進数表記ということでしょうか?
その通りです。他にも2進数や8進数があります。私たちが普通の生活で使っているのが10進数ですね。
>実際、標準入出力とファイルへの入出力の方法
#1さんの方法で間違いありません。バイナリモードでファイルをオープンすれば%dでコーディングしても、ファイルの中身はHEXで書かれれています。
>ヘキサコードのヘキサの部分の英語のつづりを教えてください。
#1さんと同じです。参考URLを検索してください。
>どう便利なんでしょうか?どういった場合に使うんでしょうか?
だいたい、C言語を使用するケースって、デイバスドライバとかOSのAPIを操作しますよね。そんな技術解説書や情報はすべて16進数で記述されていますので、10進数に変換してコーディングしても、バグがでたとかディバックの際に、また10進→16進変換してって無駄な手間が増えるだけですから。バグの元ってことで。
ちなみにC言語の系譜は、A言語(アッセンブラ、いわゆるマシン語です)→B言語→C言語→C++orC#といったところです。B言語は非常に短命な言語で私も知りません。UNIX系のOSで「B Shell」がかすかに残っている程度ですね。

参考URL:http://dictionary.goo.ne.jp/search.php?MT=HEX&ki …
    • good
    • 0
この回答へのお礼

ご回答いただきましてありがとうございした。

すみませんバイナリーモードのオープンってどうやるんでしょうか?
2進数や8進数は何コードで%何でしょうか?

あの、もし、更に教えていただけるのであれば
見ていただけたらと思ったのですが、
実際に簡単なテストプログラムを作ってみたのですが、
使い方おかしいですかね?

以下のプログラムを実行し、
numberで15を入力し、stringでaを入力した結果

input number = 15
input string = feb
abc =>ff7
123 =>7b

となり、10進数の123は16進数に変換されましたが、
他はされたんでしょうか?
文字の場合は、文字コードが16進数になったとかですかね。

#include<stdio.h>

main()
{
int atai=123,a;
char ch[3]="a",b[10];
FILE *fii;

fii=fopen("hexa.dat","w");

printf("number input=>");
scanf("%x",&a);


printf("string input=>");
scanf("%x",b);

printf("input number = %x\n",a);
fprintf(fii,"input number = %x\n",a);
printf("input string = %x\n",b);
fprintf(fii,"input string = %x\n",b);

printf("abc =>%x\n",ch);
printf("123 =>%x\n",atai);
fprintf(fii,"abc =>%x\n",ch);
fprintf(fii,"123 =>%x\n",atai);

fclose(fii);
}


もしもご回答いただけるのであればお願いいたします

お礼日時:2003/04/15 13:33

おそらく16進数のことでいいと思います。


正式には16進はhexadecimalといい、hexa(6) + decimal(10進法)の意味です。
hexだけだと「6」のことになって、意味的にはおかしいのですが慣用的に使われているようです。
ヘキサコードのスペルはhexacodeになるでしょう。

16進数を入出力するには、printf(), scanf()族の関数で
%xか%Xを使います。
数を普通の10進で表示するとき%dを使いましたね。あれのかわりに%x,%Xを使います。
%xを使うとa~fが小文字になり、%Xを使うと大文字になります。
    • good
    • 1
この回答へのお礼

ありがとうございました。
ヘキサコードでネットで検索してみましたが、
いつまでたっても16進数らしい事はわかったのですが、
使い方までは見当たりませんでしたので感謝しています。

あの、もし、更に教えていただけるのであれば
見ていただけたらと思ったのですが、
実際に簡単なテストプログラムを作ってみたのですが、
使い方おかしいですかね?

以下のプログラムを実行し、
numberで15を入力し、stringでaを入力した結果

input number = 15
input string = feb
abc =>ff7
123 =>7b

となり、10進数の123は16進数に変換されましたが、
他はされたんでしょうか?
文字の場合は、文字コードが16進数になったとかですかね。

#include<stdio.h>

main()
{
int atai=123,a;
char ch[3]="a",b[10];
FILE *fii;

fii=fopen("hexsa.dat","w");

printf("number input=>");
scanf("%x",&a);


printf("string input=>");
scanf("%x",b);

printf("input number = %x\n",a);
fprintf(fii,"input number = %x\n",a);
printf("input string = %x\n",b);
fprintf(fii,"input string = %x\n",b);

printf("abc =>%x\n",ch);
printf("123 =>%x\n",atai);
fprintf(fii,"abc =>%x\n",ch);
fprintf(fii,"123 =>%x\n",atai);

fclose(fii);
}


もしもご回答いただけるのであればお願いいたします。

お礼日時:2003/04/15 13:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!