2

元従業員が開発した C++ コードがいくつかあります。ソフトウェアの結果のいくつかを明確化/テストしようとしています。中間ステップで、ソフトウェアは結果を含む「バイナリ」dat ファイルを保存します。このファイルは、後でソフトウェアの別の部分によってインポートされます。

私の目的は、この出力を「バイナリ」から人間が読める数値に変更することです。

出力ファイルは次のように定義されています。

ofstream pricingOutputFile;
double *outputMatrix[MarketCurves::maxAreaNr];
ofstream outputFile[MarketCurves::maxAreaNr];

書き込み手順は次のとおりです。

 pricingOutputFile.write((char *)&outputMatrix[area], sizeof(double));

行列は「倍精度」で満たされています

これを変更して人間が読めるファイルを出力する方法はありますか?

std::string cout私はさまざまな方法を「ググって」試しましたが、今まで成功していませんでした。

<< で提案を試みましたが、次のエラーが発生しました: エラー C2297: '<<' : 不正、右オペランドの型が 'double' です

彼女が私を正しい軌道に乗せたという提案:

sprintf_s(buffer, 10, "%-8.2f", rowPos);
pricingOutputFile.write((char *)&buffer, 10);

インスピレーションは http://www.tenouk.com/cpluscodesnippet/usingsprintf_s.htmlにあります。

助けてくれてありがとう

4

3 に答える 3

0

これをインライン化できます:

pricingOutputFile << std::fixed
                  << std::setw(11)
                  << std::setprecision(6)
                  << std::setfill('0')
                  << rowMin;

しかし、それは非常に不可欠です。私は常に、できるだけ長く宣言的でありたいと思っています。これを行う簡単な方法は次のとおりです。

 void StreamPriceToFile(ofstream & output, const double & price) const
 {
      output << std::fixed
             << std::setw(11)
             << std::setprecision(6)
             << std::setfill('0')
             << price;
 }

 //wherever used
 StreamPriceToFile(pricingOutputFile, rowMin);

しかし、(私の意見では)さらに良いのは次のようなものです。

 //setup stream to receive a price
 inline ios_base& PriceFormat(ios_base& io)
 {
      io.fixed(...);
      ...
 }

 //wherever used
 pricingOutputFile << PriceFormat << rowMin;

私の C++ は非常にさびているか、PriceFormat に入力します。

于 2013-10-21T13:40:22.480 に答える