- ベストアンサー
数字を数値に変換
scanf()で数字(文字列)を入力し、それをdataという場所に16進数(数値)で格納したいのです。 例えば、 scanfで「3b」と入力したら、dataには、「0x3b」が格納されているようにしたいのですが、どのようにしたらいいのか教えてください。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
sprintf()関数でOKです。 data = sprintf("%0x",scanfで取得した変数名※1); で良いかと思います。 ※1scanfで取得した変数はchar型が前提です。 詳しくはC,VC++のprintf文等の書式にあります。
その他の回答 (4)
- a-kuma
- ベストアンサー率50% (1122/2211)
scanf() でやるとしたら、こうなります。 int data; scanf("%x", &data);
- toysmith
- ベストアンサー率37% (570/1525)
とりあえずstrという配列に文字列が入っているるとして。 dataがlongの場合: data = strtol(str, NULL, 16) ; dataがlongで無い場合はキャストしてください。 strtol()は便利な関数で、最後の引数に基数を指定できます。 16と書けばstrを16進文字列として変換します。 最後の引数には2~36までの数値を指定できます。 入力(=strの内容)が"0xab"のようなパターンの場合は最後の引数に0を指定すれば、いわゆる「C言語の10進16進8進表記」を認識して変換してくれます。 ホントは2番の引数もNULLじゃ無い方が良いのですが、エラー処理が必要ないみたいなので割愛します。
- itohh
- ベストアンサー率45% (210/459)
こんにちは。itohhといいます。 「0x3b」と4バイトの文字列で格納するのではなくて1バイトの16進数で格納したいのですね? 過去に2回ほど似たようなことにアドバイスしました。 そちらは、参考にならないですか? http://oshiete1.goo.ne.jp/kotaeru.php3?q=175147 http://oshiete1.goo.ne.jp/kotaeru.php3?q=214994
変数 data の型はなんでしょうか? int 型や long 型で宣言してある場合には、atoi 関数や atol 関数が使えます。