プロが教えるわが家の防犯対策術!

scanf()で数字(文字列)を入力し、それをdataという場所に16進数(数値)で格納したいのです。
例えば、
scanfで「3b」と入力したら、dataには、「0x3b」が格納されているようにしたいのですが、どのようにしたらいいのか教えてください。よろしくお願いします。

A 回答 (5件)

sprintf()関数でOKです。


data = sprintf("%0x",scanfで取得した変数名※1);
で良いかと思います。
※1scanfで取得した変数はchar型が前提です。
詳しくはC,VC++のprintf文等の書式にあります。
    • good
    • 0

 変数 data の型はなんでしょうか?



 int 型や long 型で宣言してある場合には、atoi 関数や atol 関数が使えます。
    • good
    • 0

こんにちは。

itohhといいます。

「0x3b」と4バイトの文字列で格納するのではなくて1バイトの16進数で格納したいのですね?

過去に2回ほど似たようなことにアドバイスしました。
そちらは、参考にならないですか?
http://oshiete1.goo.ne.jp/kotaeru.php3?q=175147
http://oshiete1.goo.ne.jp/kotaeru.php3?q=214994

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=175147,http://oshiete1.goo.ne.jp/kotaeru.php3?q=214994
    • good
    • 0

とりあえず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じゃ無い方が良いのですが、エラー処理が必要ないみたいなので割愛します。
    • good
    • 0

scanf() でやるとしたら、こうなります。



  int data;

  scanf("%x", &data);
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!