• 締切済み

charの操作について

お世話になります、フジと申します。 今回皆様にお聞きしたいことは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となってしまい、目的の操作が達成できません。 よい方法をしっている方がいましたら、宜しくお願い致します。

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

data='30'; といった動作を求めているのであれば、不可能です。 char型は1文字しか扱えませんから。 あと、10→16の基数変換やってる割にa~fがない(a>10及びb>10が考慮されてない)のはまずいのでは?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

目的をはっきりさせましょう 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 これが期待する答えなのでしょうか?

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

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進表記

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

>16進数用 の意味が若干理解しづらいのですが、 cの計算結果をdataの値を30にしたいだけであれば、 >c = (int)data; //ここでcは48になる の逆を行えばいいだけです。 data = (char)c; と。

関連するQ&A

専門家に質問してみよう