- ベストアンサー
数字を文字型に変換する
今日はCの初心者です。 数字を文字型に変換するのはsprintf以外に無いのでしょうか。 sprintfは変換後の数字を配列に入れるようになっていますが、使いにくいです、もっと簡単にキャストできないのでしょうか。 宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
sprintfが最も簡単に変換できる(唯一の)方法です。 もし、もっと簡単なものを望むのであれば、そのようなものを自作するしかありません。(実際に、業務で使用するプログラムは、そのような作り方をしています。それは、一般的に、業務用の共通サブルーチンと呼ばれています。) それが、C言語の悪いところでもあり、良いところでもあります。 自分で、自作することをいとわなければ、C言語なら何でも作れます。 今はやりのRuby,PerlはC言語で作られています。
その他の回答 (5)
>型変換に伴うByte数の違いまでも吸収してこそCast、型変換関数の意味があるのではないでしょうか。 吸収の意味を履き違えていませんか? 型キャストを行って、int型のデータをchar型に入れてもプログラム上では正常に動作します。 ですが、プログラマが意図した動作をするかどうかは別物です。 貴方がint型に入り得るデータを全て把握できていて、int型のデータをchar型のデータに入れたときに値が変更される事(int型のデータが1byteより大きい場合)を、完全に理解していて、型キャストしながら無駄なデータを捨てていると考えているのなら、そのままの型キャストでも良いかと思います。 (そのソースファイルを他の人が変更する時は大変ですが) もしchar型のデータサイズが1byteだと把握していて、int型(32bitOSでは4byte)のデータを値を変更させずに格納したいと考えているのなら、ご自分で型キャストを行う関数を作成するか、配列自体を使わないでデータを上手く管理する方法を考えましょう。 熱心に考えるのは良いことです。 がんばってください。
ただの型キャストになりましたね。 >int型の値をもった変数ssをchar型の配列moji[0]=(char)ss まずこれが何を意味するか考えてみてください。 下記のプログラムを動作させるとint型とchar型のデータサイズが分かります。(単位:byte) int datasize=0; datasize = sizeof(int); datasize = sizeof(char); intの方がデータサイズが大きいことが分かると思いますが、下記の時にssがchar型より大きな値を保持しているときにまともなプログラムが組めますか? moji[0]=(char)ss
お礼
bravheartさん、回答有り難う御座います。 >intの方がデータサイズが大きいことが分かると思いますが、下記の時にssがchar型より大きな値を保持しているときにまともなプログラムが組めますか?moji[0]=(char)ss 型変換に伴うByte数の違いまでも吸収してこそCast、型変換関数の意味があるのではないでしょうか。 勿論メモリ領域の再利用、再定義も含めての処理となりますが。
- asuncion
- ベストアンサー率33% (2127/6290)
>もっと簡単にキャストできないのでしょうか。 ということは、今行なわれているのはキャストであって、 それがもっと簡単にできる方法をお探しなのですね。 具体的には、どんな風にキャストを使われているのでしょうか。 sprintf関数を使う話とは関係ないことですけれど。
お礼
asuncionさん、回答有り難う御座います。 例えば、int型の値をもった変数ssをchar型の配列moji[0]=(char)ss、とか、 for(i){ char moji[i] = (char) suiji[i] // suiji[i]は int型 } とか、 for(i){ char moji[i] = (sprintf) suiji[i] // suiji[i]は int型 } とか簡単に出来ないのかなと考えています。 宜しくお願いします。
- titokani
- ベストアンサー率19% (341/1726)
「数字」を「文字型」に変換するだけなら、ただ代入するだけですね。 二桁以上の数字は入りませんが。
お礼
titokaniさん、回答有り難う御座います。 >「数字」を「文字型」に変換するだけなら、ただ代入するだけですね。 具体的に数字を何に代入するのでしょうか。 例えば、数字型の値をもった変数SSを「char AA[0]=SS」としてもAAに値が入って行きません。 宜しくお願いします。
- Tacosan
- ベストアンサー率23% (3656/15482)
そも文字列は配列なんだから「変換後の数字を配列に入れる」以外にどうしろというんでしょうか?
お礼
bravheartさん、みなさん回答有り難う御座いました。 自分でももっと勉強します。 今後とも宜しくお願いします。