- ベストアンサー
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; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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; と言う事をしたいのでは??と思いました。 見当違いならごめんなさい。
その他の回答 (3)
- smat7
- ベストアンサー率46% (7/15)
やろうとしていることが今ひとつわからないのですが >char型をどうすればint型に変換すればいいのか インテグラルプロモーションにより演算に用いられる変数は一度自動的にint型に変換されます。要はCPUのレジスタ幅に合わせられるということなのですが、おそらくこれを目的とされているのではないと推察します。 8bit16進数値を10進数に直したいということのようにお見受けします。 計算に使うのであれば特に変換の必要はありません。そのまま演算に使用してください。コンピュータの内部表現はみな2進数です。 値を10進数で表示したいということであればprintf系の関数で書式指定の%dを使ってください。内部表現を10進数とすることは多倍長の計算としては無いこともないですが、たかだか8BITのAD変換値に対して行う内容ではないですよね。
- ency
- ベストアンサー率39% (93/238)
というよりも、話の内容から推測するに、int型にキャストする必要もない気がしますが。。。 unsigned char x; の場合、x には 0~255 までの範囲の数値が入っているわけで、この場合の x は int型の値と同様に扱えるわけですし。。。 # unsigned char型とint型との違いは、単純に格納できる数値の範囲だけですからね。 それとも、int型の変数に代入する必要があるということでしょうか。 そういう話なら、No1 anmochiさんの回答のとおりです。
- anmochi
- ベストアンサー率65% (1332/2045)
ほよ? unsigned charをintに変換するんよね? xの中に入ってるんは文字コードではなくって値なんよね? y = (int)x; ではダメなのかな? キャストすれば良いと思うけど・・・・。私の勘違いかな?
お礼
ご親切にDO-MOありがとうございました(・v・)b とっても役に立ちました。