ページ 11

16進数を変数に入れる

Posted: 2012年3月31日(土) 22:56
by net921
下記のようなプログラムを実行すると5cと表示されます。
これを変数に入れてから表示したいのですがどのようにすればよいでしょうか??

利用目的としてはchar s[]=5c;と一致したら何かを実行する処理をするためです。
うまく動いたプログラムは下に書いてあります。

Re: 16進数を変数に入れる

Posted: 2012年3月31日(土) 23:00
by beatle
net921 さんが書きました: これを変数に入れてから表示したい
僕には、checksumという変数に入っているように見えるのですが。そういうことではなくて?

Re: 16進数を変数に入れる

Posted: 2012年3月31日(土) 23:04
by net921
vc++2010
でステップ実行して変数の中身を見てみると92'\'と書いてありました。

Re: 16進数を変数に入れる

Posted: 2012年3月31日(土) 23:07
by net921
こうするとifのところでエラーになります。
うまく動いたプログラムは下に書いてあります。

Re: 16進数を変数に入れる

Posted: 2012年3月31日(土) 23:18
by beatle
文字と文字列を==で比較しようとしてますからねぇ。
つまりnet921さんがやりたいのは、整数としての0x5cという値を、文字列に変換してchar型配列に格納する、ということでしょうか。
それならsprintfが使いやすいと思います。

コード:

char buf[4];
sprintf(buf, "%02x", checksum);

Re: 16進数を変数に入れる

Posted: 2012年3月31日(土) 23:25
by net921
できました。
ありがとうございます。

Re: 16進数を変数に入れる

Posted: 2012年3月31日(土) 23:34
by net921
このようにしましたがifの中が実行されません。

うまく動いたプログラムは下に書いてあります。

Re: 16進数を変数に入れる

Posted: 2012年3月31日(土) 23:37
by net921
何かおかしなところがあるのでしょうか??

Re: 16進数を変数に入れる

Posted: 2012年3月31日(土) 23:56
by beatle
C言語の文字列を復習なされたほうがよろしいかと思います。
検索したところ、「C言語で文字列を扱う」のようなページが有りました。
他のサイトでも書籍でもいいと思いますが、文字列を勉強して下さい。

Re: 16進数を変数に入れる

Posted: 2012年4月01日(日) 00:02
by box
net921 さんが書きました:

コード:

  if(buf == "5c"){
このif文は、buf[0]のアドレスと文字列リテラル"5c"の先頭のアドレスとを比較しています。
通常、両者は相異なります。よって、このif文は偽となります。
buf[]の中身が"5c"であるかどうかを調べるには、
strcmp()あたりを使うのがいいと思います。

Re: 16進数を変数に入れる

Posted: 2012年4月01日(日) 00:02
by fulls

コード:

  char buf[4]=””;
全角半角が混ざってるように見えるのですが。

コード:

  if(buf == "5c"){
charの文字列の比較はNo:5でbeatleさんに言われていたと思いますが、"=="ではできません。

Re: 16進数を変数に入れる

Posted: 2012年4月01日(日) 00:14
by YuO
真にやりたいことが

コード:

  if(checksum == 0x5c){
であるようにしか思えないのは私だけでしょうか……。

Re: 16進数を変数に入れる

Posted: 2012年4月01日(日) 08:07
by net921
ありがとうございます。
ちょっとやってみます。

Re: 16進数を変数に入れる

Posted: 2012年4月01日(日) 08:59
by net921
うまくいきました。
僕は馬鹿でした!!」