• ベストアンサー

数字を文字型に変換する

 今日はCの初心者です。  数字を文字型に変換するのはsprintf以外に無いのでしょうか。  sprintfは変換後の数字を配列に入れるようになっていますが、使いにくいです、もっと簡単にキャストできないのでしょうか。  宜しくお願いします。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

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

その他の回答 (5)

noname#96502
noname#96502
回答No.6

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

htgotk_001
質問者

お礼

bravheartさん、みなさん回答有り難う御座いました。 自分でももっと勉強します。 今後とも宜しくお願いします。

noname#96502
noname#96502
回答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
質問者

お礼

 bravheartさん、回答有り難う御座います。  >intの方がデータサイズが大きいことが分かると思いますが、下記の時にssがchar型より大きな値を保持しているときにまともなプログラムが組めますか?moji[0]=(char)ss  型変換に伴うByte数の違いまでも吸収してこそCast、型変換関数の意味があるのではないでしょうか。  勿論メモリ領域の再利用、再定義も含めての処理となりますが。

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.4

>もっと簡単にキャストできないのでしょうか。 ということは、今行なわれているのはキャストであって、 それがもっと簡単にできる方法をお探しなのですね。 具体的には、どんな風にキャストを使われているのでしょうか。 sprintf関数を使う話とは関係ないことですけれど。

htgotk_001
質問者

お礼

 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)
回答No.3

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

htgotk_001
質問者

お礼

 titokaniさん、回答有り難う御座います。  >「数字」を「文字型」に変換するだけなら、ただ代入するだけですね。  具体的に数字を何に代入するのでしょうか。  例えば、数字型の値をもった変数SSを「char AA[0]=SS」としてもAAに値が入って行きません。  宜しくお願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

そも文字列は配列なんだから「変換後の数字を配列に入れる」以外にどうしろというんでしょうか?

関連するQ&A

  • 文字を整数(int)に変換

    char型の数字文字を、int型に変換したいのですが、どんな方法があるでしょうか? 具体的には、 char s[6] = "12345"; int line[5]; のようなchar配列の文字を、int型のline配列に移したいのです。(line[0]=1,line[1]=2,...,line[4]=5となるように。) "文字 int 変換"などで検索でも調べたのですが、 int→文字のsprintfしか見つかりませんでした。 感覚的にはこの逆のような操作をしたいです。 何か関数を用いる方法でも、そうでない方法でもよいので、 教えてください。よろしくお願いします。

  • Excel で 文字→数字変換

    エクセルで文字→数字変換を行いたいのですが、 どのようにすればよいでしょうか? (やりたい例) あるセルの特定文字列位置の文字を数字に変換したい。 文字列先頭から4番目の文字を元に数値に変換する。 Aだと1と変換、Bだと2と変換、Cだと3と変換… A1:xxxBxxxx B1:2 うまく質問が表現できなくてすいません。 実現方法はVBAでも結構です(使ったことはありませんが)。

  • 数値をポインタ文字配列に変換

    整数型の数値を文字に変換しようと sprintfを使おうと思ったのですが ポインタの文字型配列を第一引数 にして変換すると エラー出てしまいます 開発環境はVC++2010で WindowsXPproです これは仕様なんでしょうか? もしそうなら他の変換方法はありますか?

  • 文字列を数字型に変換したい

    いつもお世話になっております。 eclipseというツールでC言語のプログラムを触っているのですが、 文字列の数字を数値型に変換して掛け算をしたいのですが、 型変換の関数はありますでしょうか??

  • sprintf関数での文字列変換について

    マイコンにて、 C言語で浮動小数点の数値を表示するプログラムを作成しているのですが、 PRINT_OUT("123.456"); のように、文字列を直接指定した場合は正しく表示されるのですが、 sprintf()関数を用いて、浮動小数点を文字列に変換した場合、 buf char[10]; sprintf(buf,"%lf",123.456); PRINT_OUT(buf); とした場合はプログラムが暴走?(恐らく配列破壊を起こしていると 思われますが、)してしまい、上手く動作しません。 (但し、整数の場合は正常に動作します。) そこで、質問させていただきたいのですが、 "123.456"のように直接文字列を指定した場合と、浮動小数点123.456 をsprintf()関数を用いて文字列に変換した"123.456"の書式に何か 違いはあるのでしょうか?よろしくお願い致します。

  • 文字列から数字への変換

    文字列から数字への変換にはatoiなどを使うと思うのですが これだと文字として0を変換すると アルファベットなどを変換した場合と 同じになってしまいますよね? 0も入力を受け付けてなおかつ文字列は受け付けないように するにはどのようにすればよいのでしょうか? アドバイス・回答よろしくお願いします

  • c言語 int型の数字をchar型の配列に

    c言語についてです。 int型の数字をchar型の配列に入れたいです。 関数に対してint型の数字を文字列として渡し、 関数内でchar型の配列に格納したいです。 例として、 a(char a[]){  ~~  ~~ } int main(void){ int x = 5678;  ~~  a(x); } とできるようにしたいです。 しかしこれだと5678という値がそのままchar型の一つの配列に入る?ため正しくないです。 欲しい結果としてはちゃんとa関数内で、 a[1] = '5' a[2] = '6' a[3] = '7' a[4] = '8' となってほしいです。 もともと渡す値が”5678”となっていれば結果は正しく出るのですが、 渡す値がint型と決まっているためどうにかして5678を”5678”とすればいいのではないかと考えています。 つまり5678を単純に文字列に変換すればいいのでしょうか? またプログラム内ではsprintfやatolを使用しないで実現させたいです。 難しいかもしれませんがお願いします。 なんだか説明が下手ですみません。 お願いいたします。

  • EXCELで文字を数字に変換したい

    お世話になります。 エクセルシート上の見た目数字、実は文字列という値を、数字に変換したいのですが、EXCEL-VBAでどのように処理すればいいのでしょうか? 1.セルから文字列型の見た目数字の値をとってくる。 2.VBAで文字列型から整数型に変換する。 3.元のセルに貼り付ける。 4.セル書式を数字のカンマ形式にする。 リンクではなくこのような処理をしたいのですが、どうすればいいのでしょうか?

  • 数字の変換がうまくいきません。

    数字の変換がうまくいきません。 初めまして。 MacOSX 10.6.4を使用している者です。 Wordを使っている最中に、数字の全角→半角の変換が出来なくなってしまいました。 全角で「1998」と打ち、半角変換をする為にスペースを押すと打ち込んだ数字が全て消えてしまいます。 また、全角で「1998年」と打ち込むと、文字の打ち込みが途中で止まってしまい、「1998n」となり、終いには「eん」としか表示されなくなってしまいます。 ですが「fnキー+F10」を使った半角への変換もうまくいきます。 4桁の数字の変換がうまくいかず「236789」や「45」などの数字は全角から半角へとうまく変換できるのです。 この現象はWordだけだと思っていたのですが、Firefoxやテキストエディットなどに打ち込む際にも同じ症状が出てしまいます。 普通の文字変換は何も支障がないのですが、数字の変換だけがうまくいきません。 文字を打ち込んでいる最中に、キーボードのどこかを押してしまったのでしょうか? どなたか対処法あれば教えていただきたいです。 よろしくお願い致します。

    • ベストアンサー
    • Mac
  • 数字の変換について

    非常に単純な質問で申し訳ありません。 1~50までの○に囲まれた丸数字を使いたいのですが、1~20までは変換されます【 数字を入力 ⇒ 変換キー ⇒ 変換候補の中から 丸文字を選択 】が、21~の数字が変換候補に無い為に変換できません。どのようにしたら、21~以降の数字を丸数字に変換できますか?  恐らく簡単な事だと思うのですがどなたか教えて頂けませんでしょうか? 宜しくお願いします。

専門家に質問してみよう