• ベストアンサー

16進法での表示

ある数値を入力して、16進法へ変換するプログラムを作成したく思っています。 "%x"を使用してprintfで変換というのは分かるのですが、いざ記述するとそのままの値で表示されたりしてうまくいきません。 どのように作成すればよいでしょうか? ご教示よろしくお願いします。

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

  • ベストアンサー
  • likipon
  • ベストアンサー率38% (44/114)
回答No.3

普通はそれでうまくいくはずです. うまくいかない ことは考えにくいので, 何か間違いがないか探すの が先決でしょう. ※初学者さんであれば自分で作ってみるのも勉強に はなりますが. 以下に例を書いておきます. ・アルファベットを小文字で表示 printf("%x", 14); → e ・大文字で表示 printf("%X", 14); → E ・2桁で表示したい printf("%02X", 14); → 0E ※始めの0は, 足りない分をゼロ詰めの意味. ※次の2は, 2桁で表示の意味. また, 変換結果を配列に格納したければ, sprintf という関数もあります. char hoge[100]; sprintf(hoge, "%02X", 14); などと使います. 文字列操作の関数をとっかえひっかえ 使うよりも効率的なことが多いのでおすすめです.

enjoy-ride
質問者

お礼

早速のご解答ありがとうございます。 下にも書きましたが、初学者です^_^; ヒントという形で教えていただけてとても嬉しく思います。 そうですよね。数を作ってナンボって感じですよね。 質問に書いた方法で動くはずですよね...私もそう思っていたのですが、10と入力したら出力も10だったので、やり方が違うのかと思い質問させていただきました。 sprintfというのもあるのですね。。今回の場合scanf関数でも動きますよね? 例を参考にして組み立てたいと思います。 ご教示ありがとうございました。

その他の回答 (3)

  • valvelde
  • ベストアンサー率35% (46/129)
回答No.4

printf("%x",127); -> 7f printf("%X",127); -> 7F printf("%#x",127); -> 0x7f printf("%#X",127); -> 0X7F

enjoy-ride
質問者

お礼

早速のご解答ありがとうございます。 私の場合は0x7fを変数で宣言してやったのですが、それが問題だったのでしょうか・・・ 明日もう一度やってみようと思います。 ご教示ありがとうございます。

回答No.2

No1です。回答してから気が付きました。 output[0] = a[(data & 0xf000) >> 12]; output[1] = a[(data & 0x0f00) >> 8]; output[2] = a[(data & 0x00f0) >> 4]; output[3] = a[(data & 0x000f) >> 0]; で、%sの方がいいですね。keta[0]とか無駄ですね。 スイマセン・・・

enjoy-ride
質問者

お礼

早速のご解答ありがとうございます。 桁ごとに分けるという方法は思いつきませんでした。 私は初学者なので、いろいろな方法でプログラムを完成させたいと思っているので、自分の考えていなかった方法があるとわかり、嬉しく思います。 silverbearさんのヒントを元に完成させたいと思います。

回答No.1

まず16のN乗で表示するために桁ごとに数字を分けてみてはどうでしょう? keta[0] = data & 0x000f >> 0; keta[1] = data & 0x00f0 >> 4; keta[2] = data & 0x0f00 >> 8; で、次にその数字に対応した配列を利用するために a[0]='0';a[1]='1';・・・・a[14]='e';a[15]='f'; として、 output[0] = a[keta[0]]; output[1] = a[keta[1]]; output[2] = a[keta[2]]; 等とすればいいんじゃないかなぁ?と思います。 後は文字(output[0]~output[3])を表示すれば良いと思います。 よっぱのたわごとですが。

関連するQ&A