数字を文字列で表したいのですが、うまくいかずこまっています。
詳しく言うと、数字0〜255を、1バイトの文字で表したいのです。
今は、
wsprintf(str,"%c",id);
という風にしていたのですが、うまくいったのかなと思っていたら、数字が「10」のときだけ、なぜかうまくいきません。
このやり方が、まずいのでしょうか?
このことについて、分かる方がいましたら、ご教授おねがいします。
>数字が「10」のときだけ、なぜかうまくいきません。
うまくいかないとは、具体的に理想とどう違うのですか?
ASCIIコードとの対応はわかっていますか?
10 は LF(改行)ですよ。
(参考)
http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
(初心者のためのポイント学習C言語-ASCIIコード表)
>wsprintf(str,"%c",id);
wsprintf(str,"%x",id);
で良いかも。
ただし、上記の方法でよかった場合、
>数字が「10」のときだけ、なぜかうまくいきません。
10の時以外は”うまくいっていた”ってことはありえないのですが。
REEさん、Blueさん、とおりすがりさん、早い返信ありがとうございます。
具体的に言いますと、MP3のTag情報の編集ツールを作っていて、そのうちのトラック番号を1バイトで書き込まないといけなくて、トラック番号「10」を指定すると、なぜか書き込まれません。
数字を文字列に変換した後に、文字列をもう一度数字に変換してみて、数字を確認すると、「10」のはずが「0」になっています。
すいません、書き忘れてました。
wsprintf(str,"%x",id);
では、うまくいきませんでした。
10は、改行ということが関係しているのでしょうか?
> 具体的に言いますと、MP3のTag情報の編集ツールを作っていて、
>そのうちのトラック番号を1バイトで書き込まないといけなくて、
>トラック番号「10」を指定すると、なぜか書き込まれません。
どのようにしてかきだしているのでしょうか?
それと本題とは関係ないですが wsprintf を使っているのはなぜ?
(charのキャストでは問題あるのかな?)
>どのようにしてかきだしているのでしょうか?
fwrite()を使って、他のタイトル情報などといっしょに、まとめて書き込んでいます。
wsprintf()を使っているのに、特に意味はありません。別に、キャストでも、問題なかったですね・・・
もちろんバイナリモードでひらいていますよね?
(ききたかったのはそこだったりして)
Blueさん、返信ありがとうございます。
うまくいきました!!!
バイナリモードで、開いていませんでした。
ほんとに、ありがとうございました!!!
>数字を文字列に変換した後に、文字列をもう一度数字に変換してみて、
>数字を確認すると、「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”を指定したら
どうなんですかね?正常に動くのでしょうか。
・・・というような感じでバグチェックをしましょう。
ひえ〜・・・解決しちゃってる・・・。
無視しちゃってください。
とおりすがりさん、細かいところまで説明してくださいまして、ほんとにありがとうございました!!!
ActiveXコントロール(階層フレキシブルグリッド)を使ったアプリを作ったのですが、配布するためのDLLがよく分からないのです。
MFC71/msvcr71/msvcp71/mfc42/msvcp60 ..などのMFCランタイム以外にActiveXランタイムが必用だと思うのですがMSHFLXGD.OCX以外に必用なものはなんでしょうか?
ツイート | ![]() |