文字列を2進数と16進数に変換

[戻る]
木之下 2002/04/20(土) 10:47:54
初めまして、木之下という者です。
Win2000でVC6.0MFCで開発しているのですが、文字列を2進数と16進数に変換(その逆も)する必要があるのですが、関数を色々調べてもよくわかりません。
初心者の為的外れな質問になっているかもしれませんが、よろしくお願いします。

dairygoods 2002/04/20(土) 11:33:53
こんにちは。

intならば、_ltoa, atoiでできます。
MSDNの「データ変換」というトピックに変換関数が一覧されています。
用途に合ったものを探してください。

中級者X 2002/04/20(土) 12:07:05
「文字列を2進数と16進数に変換」という表現が間違っていることをまず理解しましょう。
「2進数や16進数を表す文字列を数値に変換」なら正しいです。
strtolやstrtodを調べましょう。

逆に「数値を2進数や16進数を表す文字列に変換」するならsprintfやCString::Formatを
調べましょう。

2進数は無理か...。
1ビットずつ調べて文字列に変換するような自作関数を作りましょう。

参考:
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/

木之下 2002/04/20(土) 12:26:33
私には「2進数や16進数を表す文字列を数値に変換」というのがよく理解できなかったので、もう少し質問させて下さい。
実例を挙げてみると、私は「あ」を「82A0」や「1000001010100000」に変換したいのですが、教えて下さったやりかたでよいのでしょうか?

中級者X 2002/04/20(土) 13:31:29
最初にその実例を書いてもらえれば分かりやすいのに。

2進数は面倒なので省きます。

    unsigned char buf[] = "あ";
    char str[10];
    sprintf(str, "%02X%02X", buf[0], buf[1]);

とか。
逆は考えてみてください。
strtolを使えばできるでしょう。
もちろんそれだけでできるかといえばそうではなくて、
他にすることはあるでしょうけど。

どうしても分からない場合は再度質問してください。
まずは自分で考えてみる(調べてみる)ことが大切です。

saito( ); 2002/04/20(土) 14:31:05
わたしも、ここで皆さんにお世話になっている者です。
(つまり、超初心者・・・)

たぶん、木之下さんは、
『数字:1,2・・(a=1+2と言う風に計算できるもの)
と
『画面上や、プリントアウトできる『文字:1,2・・・(これは
 a='1'+'2'となり、計算できない(=3とはならない)
をいっしょと勘違いしているのではないでしょうか?

数字の1はあくまで、1で,文字の1はPC内では'49'(ASCIIのとき)として
取り扱っております。

おなじように、『あ』も'1’と同じ文字なので'82A0'という
コード(JIS???)にて取り扱っています。

そこの違いを考えると、
『文字コード』取り出し関数ー>『コード(数値)−>文字』変更関数ー>表示

または、CString::Frmat("%d",i+'A')・・・・

とか、何の関数を捜せばよいかがわかるのでは?

すみません。ご存知かもわかりませんが、
参考までに。
(超初心者より・・・)でした。

dairygoods 2002/04/20(土) 14:49:52
> 2進数は無理か...。

int n = 変換したい数字;
char buffer[33]; // 32ビット+NULLが最大
_ltoa(n, buffer, 2);

ですー。

木之下 2002/04/20(土) 15:31:31
みなさん、ご教授ありがとうございます。
しばらく、がんばってみます。

>saito( );さん
えっと、作ろうとしているプログラムは文章を2進数で表現するものなのです。
それと逆に、2進数から元の文章に戻すというものも作っています。
つまり、文章を0と1のみで表記し、さらに元の文章に戻すというものです。
ですので、計算等に使うわけではありません。(もしかしたら、語弊が生じているかもしれません)

古いスレッドには追加発言できません。