ページ 11

int型char型間の型変換について

Posted: 2010年6月12日(土) 13:04
by 大学生
四則演算を実行する電卓機能を持ったプログラムを作成しています。
その過程で、計算結果の値(int型)をスタック(char型で宣言)に格納する必要性が出てきました。
char型のスタックに格納するためには、計算結果の値をchar型に変換しなくてはなりません。
しかし、キャスト(このように:(char)answer)すると、容量(?)がchar型<int型のためか値が正しく保持されませんでした。
また、itoa関数というものも使ってみましたが、使用しているOSがLinuxのため、itoaが定義されてないとのエラーが表示されうまく機能しません。
他にint型からchar型へ型変換する方法はありますか?
やはりchar型<int型の関係から不可能なのでしょうか・・・。

回答お願いします。
コンパイラはgcc使用です。

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 13:16
by y
整数値の計算をするだけならば、スタックをchar型で作る意味はありません。
配列でスタックを作っているのか、それともmallocで作っているのかは分かりませんが、
素直にint型で作ることをおすすめします。

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 13:18
by たかぎ
> 他にint型からchar型へ型変換する方法はありますか?

結局どうしたいのかがわかりませんが、普通はキャストしかありません。
情報が失われるのが嫌なら、sizoef(int)個のchar変数または配列を使うしかないでしょう。

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 13:20
by やんち
発想を逆転して、char 型のスタックの方を int 型にみたてるとどうでしょう。

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 13:21
by hoge
256以上の値は char型のスタックには入りません。
多くの場合、128以上でもオーバーフローするでしょう。
そのスタックを使う限り、キャストしようが変換しようが同じです。

もしそれでもやりたいのならば、intをchar配列にエンコード、デコードしてpush pop するしか無いでしょう。

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 14:38
by 白い時空
すいません。ひとつ気になったんですが、itoa関数はint型をchar *型(文字列)に変換します。
もしかして、123→"123"のように数値を文字列に変換したいんですか?

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 17:50
by box
> その過程で、計算結果の値(int型)をスタック(char型で宣言)に格納する必要性が出てきました。

そうする必要がある理由がわかりません。

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 19:10
by 大学生
皆様ご回答ありがとう御座います。
int型のスタックを用意してやってみることにします。

白い時空様、
はい、数値→文字列、です。
すみません、私の親記事の書き方だと数値→文字1文字となってしまいますね・・・。

box様、
括弧付き演算式(例:12*(3+15))の実現のためです。
括弧内を計算してその結果をスタックにプッシュしたくて。
説明不足申し訳ありません。

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 20:18
by 白い時空
数値→文字1文字はおかしいと思ったらやはりそうでしたか。
数値を文字列にするのは簡単ですよ。sprintf関数を使ってください。

たとえば文字列strに "12*(3+15)" を入れたいなら
sprintf(str,"%d*(%d+%d)",12,3,15);
とすればOKです。

第1引数に文字列をいれ、第2引数からはprintf関数と同じように扱ってください。
結果を画面に出力するのではなく、文字列に入れてくれます。

Re:int型char型間の型変換について

Posted: 2010年6月12日(土) 22:10
by 大学生
白い時空様、
ありがとうございます!!
sprintf関数を使ったところ上手く数値→文字列に出来ました。
これでchar型スタックのままプログラムを書けそうです。

助かりました、ありがとうございました。