• ベストアンサー

sscanfの16進出力の逆処理

sscanfを使って char str[2]; int i; sscanf (str, "%x", &i) といった感じで文字列数値を16進に変換出来ますが 逆に16進を文字列数値に一発で変換する方法はないでしょうか 一発で出来なくてswitchなどで処理するしかないのでしょうか わかっている人には初歩的な質問かもしれないですが よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

printf又はsprintfで"%x"の書式を使います。 以下のようにしてください。 ------------------------------------ #include <stdio.h> main() { char str[16]; /* strは大きくとってください。最低でも9バイト以上*/ int i; /*画面に表示するなら以下のようにする。*/ i = 254; printf("%x\n",i); /*strに格納したいなら以下のようにする。*/ sprintf(str,"%x",i); /*これはstrに格納された内容を確認するため*/ printf("<%s>\n",str); } ------------------------------------------ 実行結果は以下の通り fe <fe>

condor2
質問者

お礼

ありがとうございます! さっそくやってみます

その他の回答 (2)

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.3

Cはしばらく触っていないので、もっといい方法があるかもしれませんが、 strtol関数とかどうでしょう? http://www.c-tipsref.com/reference/stdlib/strtol.html

condor2
質問者

お礼

すみません。流し読みだから違っているかも知れないですが、何となくchar→longな感じで私が質問している内容と逆な気がします。私の勘違いなら申し訳ないです。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> 文字列数値を16進に変換出来ますが この例は「16進数文字列を数値(int型整数)に変換」ですよね?単に「文字列数値」と言われたら、10 進数でのものが連想されます。 この逆変換、つまり「整数を16進数文字列に変換」なら、既にあるようにprintf系関数を使うのが楽でしょう。 16進数文字列変換に特化した関数を自作するにしても、大した手間ではありません sscanf (str, "%x", &i) で変換した i が「16進になる」と考えているのなら、誤解があります。 int型は数値しか記憶していません。それを10進数として扱うか、16進数として扱うかは、プログラム次第です。 i=10 ; printf("%x\n", i ) ; printf("%d\n", i ) ; i=0xa ; printf("%x\n", i ) ; printf("%d\n", i ) ; どちらも出力は同じです。

condor2
質問者

お礼

int型の16進についての詳しい説明ありがとうございます。 言われてみれば確かにint型なんだから数値として持ってるだけですね。 勘違いしてることがわかって助かりました (^^;

関連するQ&A