我有一些前员工开发的C ++代码。 我正在尝试澄清/测试一些软件结果。 在中间步骤中,软件会保存带有结果的“二进制”dat文件,该文件稍后会被软件的其他部分导入。
我的目标是将此输出从“二进制”更改为人类可读数字。
定义输出文件:
ofstream pricingOutputFile;
double *outputMatrix[MarketCurves::maxAreaNr];
ofstream outputFile[MarketCurves::maxAreaNr];
写步骤是这样的:
pricingOutputFile.write((char *)&outputMatrix[area], sizeof(double));
矩阵充满'双打'
有没有办法改变它以输出人类可读的文件?
我尝试了各种std::string
cout
和其他方法'googled',但直到现在还没有成功。
用<<<<<<<但是这给出了以下错误: 错误C2297:'<<' :非法,右操作数类型为'double'
sugestions她把我推到了正确的轨道上:
sprintf_s(buffer, 10, "%-8.2f", rowPos);
pricingOutputFile.write((char *)&buffer, 10);
灵感来自于: http://www.tenouk.com/cpluscodesnippet/usingsprintf_s.html
感谢您的帮助
答案 0 :(得分:1)
在此代码中,double占用的内存被转储到文件中
pricingOutputFile.write((char *)&outputMatrix[area], sizeof(double));
要生成人类可读,您需要使用重载运算符<< :
pricingOutputFile << outputMatrix[area];
答案 1 :(得分:0)
sugestions她把我推到了正确的轨道上:
sprintf_s(buffer,10,“%-8.2f”,rowPos); pricingOutputFile.write((char *)&amp; buffer,10);
灵感来自:http://www.tenouk.com/cpluscodesnippet/usingsprintf_s.html
答案 2 :(得分: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。