• ベストアンサー

ファイル書き込みについて

いつもお世話になっております。 現在ファイル書き込みをやっているのですが ofstream ofs("hoge", ios::trunc); BYTE byte = 5; ofs << "\"" << byte << "\"" << endl; ofs.close(); とやっても5が書き込まれず""のみとなってしまいます。 BYTEをintに書き換えると"5"と表示されるのですが、今回はBYTE型で書きたいのですが std::ostringstream oss; oss << byte; ofs << oss; とやっても文字化けしてしまいました。 なにかよい方法がありましたらご教授願います。

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

  • ベストアンサー
回答No.3

BYTEの実体は、たいていの場合、char か unsigned char なので、普通に書き込もうとすると、文字として書こうと してしまいます。 なので、書き込む瞬間だけ、int にキャストすれば、とり あえず、目的は達成できると思います。 ofs << """ << static_cast<int>(byte) << """ << endl; または、 ofs << """ << static_cast<unsigned int>(byte) << """ << endl;

iec1128
質問者

お礼

ご回答ありがとうございました。 目的の動作をいたしました。

その他の回答 (2)

回答No.2

 こんばんは。  WIN32ならば、以下のAPIで出来る様です。  「wsprintf() API」  http://msdn.microsoft.com/ja-jp/library/cc364872.aspx int main(void) { ofstream ofs("hoge.txt", ios::trunc); BYTE byte = 5; CHAR buf[10]={'\0'}; //ココで文字に変換 ::wsprintf(buf, "%u", byte); ofs << "\"" << buf << "\"" << endl; ofs.close(); return 0; }

iec1128
質問者

お礼

ご回答ありがとうございました。 目的の動作をいたしました。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

>とやっても5が書き込まれず""のみとなってしまいます。 本当に「""のみ」ですか? "と"の間に「見えない文字」はありませんか?出力ファイルを16進ダンプして見ましたか? BYTE byte = 65; と変えたらどうなりますか?「"A"」になりませんか?

iec1128
質問者

補足

16進ダンプするということがよくわかりませんでしたが確かに半角スペースが入っているようでした。65にしたところAと入ってました。

関連するQ&A

専門家に質問してみよう