質問

お世話になります、フジと申します。
今回皆様にお聞きしたいことはchar型変数の操作についてなのですが、次のプログラムのようにchar型に代入した整数を16進数用に変換させ、最後に同じchar型の変数に代入したいと考えています。
int a,b,c;
char data = 48; //dataに10進数48を代入
c = (int)data; //ここでcは48になる
a = c/16;          //16進数用に変換
b = c%16;
c = 10*a + b;        //ここでcは30になる
このint型変数c(30)をchar型変数dataに代入するにはどうしたらいいでしょうか?
char buf[5];
sprintf(buf,"%d",c);
にすればchar型の配列に代入することは出来ますが、これだとcの値30がbuf[0]=3,buf[1]=0となってしまい、目的の操作が達成できません。
よい方法をしっている方がいましたら、宜しくお願い致します。

通報する

回答 (4件)

data='30';
といった動作を求めているのであれば、不可能です。
char型は1文字しか扱えませんから。

あと、10→16の基数変換やってる割にa~fがない(a>10及びb>10が考慮されてない)のはまずいのでは?

目的をはっきりさせましょう
bufに文字列として取り出したいのならお示しの方法になります
別のやり方なら sprintf( buf, "%x", data ); でも同じことです
この場合 buf[0]='3', buf[1]='0', bud[2]=0 といった具合になります

data = 47だった場合はどうするのでしょう?
a = c /16 = 2
b = c % 16 = 15
c = 10 * a + b = 10 * 2 + 15 = 35
これが期待する答えなのでしょうか?

charもintも器の大きさ(表現可能範囲)が違うだけで数値です。
コンピュータ内の数値は全部2進数で、それを10進表記するか、
16進表記するかは利用者の好みの問題です。
>c = 10*a + b; //ここでcは30になる
cを48(10進数)から30(10進数)にしただけで、意味ある行為とは
思えません。表記を変えたいなら以下の通りです。
sprintf(buf,"%d",data); //10進表記
sprintf(buf,"%x",data); //16進表記

>16進数用
の意味が若干理解しづらいのですが、

cの計算結果をdataの値を30にしたいだけであれば、
>c = (int)data; //ここでcは48になる
の逆を行えばいいだけです。
data = (char)c;
と。

このQ&Aは役に立ちましたか?2 件

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

新しく質問する

注目の記事

フリーアナウンサー長谷川豊氏の新コーナー「このニュースどう思います?」がスタート!

元フジテレビのフリーアナウンサー長谷川豊氏から気になるニュースについておしトピの皆さんに質問します! 皆さんの意見をもとに長谷川豊氏がコラムを執筆します! アプリリリース記念として最大1万分のアマゾンギフト券プレゼントキャンペーンも実施中!

このQ&Aを見た人が検索しているワード


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集