解決済み

数字を文字型に変換する

  • すぐに回答を!
  • 質問No.5371364
  • 閲覧数310
  • ありがとう数5
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 43% (86/197)

 今日はCの初心者です。
 数字を文字型に変換するのはsprintf以外に無いのでしょうか。
 sprintfは変換後の数字を配列に入れるようになっていますが、使いにくいです、もっと簡単にキャストできないのでしょうか。
 宜しくお願いします。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1

ベストアンサー率 52% (391/751)

sprintfが最も簡単に変換できる(唯一の)方法です。
もし、もっと簡単なものを望むのであれば、そのようなものを自作するしかありません。(実際に、業務で使用するプログラムは、そのような作り方をしています。それは、一般的に、業務用の共通サブルーチンと呼ばれています。)
それが、C言語の悪いところでもあり、良いところでもあります。
自分で、自作することをいとわなければ、C言語なら何でも作れます。
今はやりのRuby,PerlはC言語で作られています。
OKWAVE 20th Be MORE ありがとうをカタチに

その他の回答 (全5件)

  • 回答No.6

>型変換に伴うByte数の違いまでも吸収してこそCast、型変換関数の意味があるのではないでしょうか。
吸収の意味を履き違えていませんか?
型キャストを行って、int型のデータをchar型に入れてもプログラム上では正常に動作します。
ですが、プログラマが意図した動作をするかどうかは別物です。
貴方がint型に入り得るデータを全て把握できていて、int型のデータをchar型のデータに入れたときに値が変更される事(int型のデータが1byteより大きい場合)を、完全に理解していて、型キャストしながら無駄なデータを捨てていると考えているのなら、そのままの型キャストでも良いかと思います。
(そのソースファイルを他の人が変更する時は大変ですが)
もしchar型のデータサイズが1byteだと把握していて、int型(32bitOSでは4byte)のデータを値を変更させずに格納したいと考えているのなら、ご自分で型キャストを行う関数を作成するか、配列自体を使わないでデータを上手く管理する方法を考えましょう。

熱心に考えるのは良いことです。
がんばってください。
お礼コメント
htgotk_001

お礼率 43% (86/197)

bravheartさん、みなさん回答有り難う御座いました。
自分でももっと勉強します。
今後とも宜しくお願いします。
投稿日時 - 2009-10-18 13:33:20
  • 回答No.5

ただの型キャストになりましたね。
>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
お礼コメント
htgotk_001

お礼率 43% (86/197)

 bravheartさん、回答有り難う御座います。

 >intの方がデータサイズが大きいことが分かると思いますが、下記の時にssがchar型より大きな値を保持しているときにまともなプログラムが組めますか?moji[0]=(char)ss

 型変換に伴うByte数の違いまでも吸収してこそCast、型変換関数の意味があるのではないでしょうか。
 勿論メモリ領域の再利用、再定義も含めての処理となりますが。
投稿日時 - 2009-10-17 23:16:21
  • 回答No.4

ベストアンサー率 31% (1558/4955)

>もっと簡単にキャストできないのでしょうか。

ということは、今行なわれているのはキャストであって、
それがもっと簡単にできる方法をお探しなのですね。

具体的には、どんな風にキャストを使われているのでしょうか。
sprintf関数を使う話とは関係ないことですけれど。
お礼コメント
htgotk_001

お礼率 43% (86/197)

 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型
}
とか簡単に出来ないのかなと考えています。

 宜しくお願いします。
投稿日時 - 2009-10-17 10:41:23
  • 回答No.3

ベストアンサー率 19% (334/1702)

「数字」を「文字型」に変換するだけなら、ただ代入するだけですね。
二桁以上の数字は入りませんが。
お礼コメント
htgotk_001

お礼率 43% (86/197)

 titokaniさん、回答有り難う御座います。

 >「数字」を「文字型」に変換するだけなら、ただ代入するだけですね。
 具体的に数字を何に代入するのでしょうか。
 例えば、数字型の値をもった変数SSを「char AA[0]=SS」としてもAAに値が入って行きません。

 宜しくお願いします。
投稿日時 - 2009-10-17 10:30:35
  • 回答No.2

ベストアンサー率 23% (3656/15480)

そも文字列は配列なんだから「変換後の数字を配列に入れる」以外にどうしろというんでしょうか?
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ