• ベストアンサー

char→10進数

PICのプラグラムをC言語で書いています。 unsigned charでxを宣言して、xには電圧をAD変換した値(8bit)が代入されます。このxの値を10進数に変換したいのですが、char型をどうすればint型に変換すればいいのか分かりません。 自分なりに作ってみましたが、うまく動作しません。ご教授よろしくお願いします。 /*抜粋*/ unsigned char x; int y,i; float n; ・・・ y=0; for(i=7;i>=0;i--){   n=(((x>>i)<<7)>>7);   if(n==1)n=pow(2,i);   y=y+(int)n; }

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

  • ベストアンサー
回答No.3

8ビットを10進数にしたい。 仮に5VのA-Dだとしたら #define Voltage 5 unsigned char x; double y; ・・・・ y = x / 0xff * Voltage; こーゆーことをしたいということでしょうか?? それ以外に思いつきませんでした。 ちなみに n=(((x>>i)<<7)>>7); の部分は n=(x >> i) & 0x01; と言う事をしたいのでは??と思いました。 見当違いならごめんなさい。

appleuser
質問者

お礼

ご親切にDO-MOありがとうございました(・v・)b とっても役に立ちました。

その他の回答 (3)

  • smat7
  • ベストアンサー率46% (7/15)
回答No.4

やろうとしていることが今ひとつわからないのですが >char型をどうすればint型に変換すればいいのか インテグラルプロモーションにより演算に用いられる変数は一度自動的にint型に変換されます。要はCPUのレジスタ幅に合わせられるということなのですが、おそらくこれを目的とされているのではないと推察します。 8bit16進数値を10進数に直したいということのようにお見受けします。 計算に使うのであれば特に変換の必要はありません。そのまま演算に使用してください。コンピュータの内部表現はみな2進数です。 値を10進数で表示したいということであればprintf系の関数で書式指定の%dを使ってください。内部表現を10進数とすることは多倍長の計算としては無いこともないですが、たかだか8BITのAD変換値に対して行う内容ではないですよね。

  • ency
  • ベストアンサー率39% (93/238)
回答No.2

というよりも、話の内容から推測するに、int型にキャストする必要もない気がしますが。。。 unsigned char x; の場合、x には 0~255 までの範囲の数値が入っているわけで、この場合の x は int型の値と同様に扱えるわけですし。。。 # unsigned char型とint型との違いは、単純に格納できる数値の範囲だけですからね。 それとも、int型の変数に代入する必要があるということでしょうか。 そういう話なら、No1 anmochiさんの回答のとおりです。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

ほよ? unsigned charをintに変換するんよね? xの中に入ってるんは文字コードではなくって値なんよね? y = (int)x; ではダメなのかな? キャストすれば良いと思うけど・・・・。私の勘違いかな?