数字を文字列に変換するには?

解決


たける  2005-04-13 20:28:38  No: 56976

数字を文字列で表したいのですが、うまくいかずこまっています。
  詳しく言うと、数字0〜255を、1バイトの文字で表したいのです。
  今は、
  wsprintf(str,"%c",id);
  という風にしていたのですが、うまくいったのかなと思っていたら、数字が「10」のときだけ、なぜかうまくいきません。
  このやり方が、まずいのでしょうか?
  このことについて、分かる方がいましたら、ご教授おねがいします。


REE  2005-04-13 20:35:53  No: 56977

>数字が「10」のときだけ、なぜかうまくいきません。

うまくいかないとは、具体的に理想とどう違うのですか?


Blue  2005-04-13 20:42:39  No: 56978

ASCIIコードとの対応はわかっていますか?
10 は LF(改行)ですよ。

(参考)
http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
(初心者のためのポイント学習C言語-ASCIIコード表)


とおりすがり  2005-04-13 21:22:11  No: 56979

>wsprintf(str,"%c",id);

wsprintf(str,"%x",id);
で良いかも。

ただし、上記の方法でよかった場合、
>数字が「10」のときだけ、なぜかうまくいきません。
10の時以外は”うまくいっていた”ってことはありえないのですが。


たける  2005-04-13 22:56:11  No: 56980

REEさん、Blueさん、とおりすがりさん、早い返信ありがとうございます。
  具体的に言いますと、MP3のTag情報の編集ツールを作っていて、そのうちのトラック番号を1バイトで書き込まないといけなくて、トラック番号「10」を指定すると、なぜか書き込まれません。
  数字を文字列に変換した後に、文字列をもう一度数字に変換してみて、数字を確認すると、「10」のはずが「0」になっています。


たける  2005-04-13 23:31:26  No: 56981

すいません、書き忘れてました。
  
  wsprintf(str,"%x",id);
  では、うまくいきませんでした。
  10は、改行ということが関係しているのでしょうか?


Blue  2005-04-13 23:47:15  No: 56982

>  具体的に言いますと、MP3のTag情報の編集ツールを作っていて、
>そのうちのトラック番号を1バイトで書き込まないといけなくて、
>トラック番号「10」を指定すると、なぜか書き込まれません。
どのようにしてかきだしているのでしょうか?

それと本題とは関係ないですが wsprintf を使っているのはなぜ?
(charのキャストでは問題あるのかな?)


たける  2005-04-14 00:07:42  No: 56983

>どのようにしてかきだしているのでしょうか?
  fwrite()を使って、他のタイトル情報などといっしょに、まとめて書き込んでいます。
  wsprintf()を使っているのに、特に意味はありません。別に、キャストでも、問題なかったですね・・・


Blue  2005-04-14 00:12:19  No: 56984

もちろんバイナリモードでひらいていますよね?
(ききたかったのはそこだったりして)


たける  2005-04-14 01:56:04  No: 56985

Blueさん、返信ありがとうございます。

  うまくいきました!!!
  バイナリモードで、開いていませんでした。
  ほんとに、ありがとうございました!!!


とおりすがり  2005-04-14 02:01:31  No: 56986

>数字を文字列に変換した後に、文字列をもう一度数字に変換してみて、
>数字を確認すると、「10」のはずが「0」になっています。

この方法だと、1段目の処理で不具合が出ているのか
2段目の処理で不具合が出ているのか、この処理以前の入力値がそもそも違う。
が、分からなくないですか?

>  wsprintf(str,"%x",id);
>  では、うまくいきませんでした。
>  10は、改行ということが関係しているのでしょうか?

int id = 15;
char str[256];
wsprintf(str,"%x",id);
MessageBox(NULL, str, "test", MB_OK);

で自分とこでは”F”が表示されました。
まずは、そちらの環境で出力されるか確かめてください。

この動きが正しいのでしたら、idに入れる処理部でバグがあるか、
idの型が違うかなどが分かると思います。

>トラック番号「10」を指定すると
どーやって指定するかの情報も無いのですが、
ユーザーが指定するのではなくて、ソースに直接”10”を指定したら
どうなんですかね?正常に動くのでしょうか。

・・・というような感じでバグチェックをしましょう。


とおりすがり  2005-04-14 02:03:24  No: 56987

ひえ〜・・・解決しちゃってる・・・。

無視しちゃってください。


たける  2005-04-14 02:51:05  No: 56988

とおりすがりさん、細かいところまで説明してくださいまして、ほんとにありがとうございました!!!


ken  URL  2005-04-14 03:15:46  No: 56989

ActiveXコントロール(階層フレキシブルグリッド)を使ったアプリを作ったのですが、配布するためのDLLがよく分からないのです。
MFC71/msvcr71/msvcp71/mfc42/msvcp60 ..などのMFCランタイム以外にActiveXランタイムが必用だと思うのですがMSHFLXGD.OCX以外に必用なものはなんでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加