大多数学习C的C++用户都喜欢使用printf/ scanf系列函数,即使他们使用C++进行编码也是如此.
虽然我承认我发现接口方式更好(特别是类似POSIX的格式和本地化),但似乎压倒性的关注是性能.
看看这个问题:
似乎最好的答案是使用fscanf并且C++的ifstream速度始终慢2-3倍.
我认为如果我们能够编译一个"技巧"存储库以提高IOStream的性能,哪些有效,哪些无效,我会觉得很棒.
要考虑的要点
rdbuf()->pubsetbuf(buffer, size))std::ios_base::sync_with_stdio)当然,欢迎其他方法.
注意:提到了Dietmar Kuhl的"新"实现,但我无法找到有关它的许多细节.以前的引用似乎是死链接.
是否有一种简单的方法可以将输出缩进到ofstream对象?我有一个C++字符数组,它是null终止并包含换行符.我想将它输出到流中,但是用两个空格缩进每一行.有没有一种简单的方法可以使用流操纵器来执行此操作,例如您可以使用特殊指令更改整数输出的基础,或者我是否必须手动处理数组并在检测到的每个换行符时手动插入额外的空格?
看起来像string :: right()操纵器是关闭的:
http://www.cplusplus.com/reference/iostream/manipulators/right/
谢谢.
-威廉
我试图用二进制模式的ofstream写一个wstring文件,但我觉得我做错了.这就是我尝试过的:
ofstream outFile("test.txt", std::ios::out | std::ios::binary);
wstring hello = L"hello";
outFile.write((char *) hello.c_str(), hello.length() * sizeof(wchar_t));
outFile.close();
Run Code Online (Sandbox Code Playgroud)
在例如Firefox中打开test.txt,编码设置为UTF16,它将显示为:
你好
谁能告诉我为什么会这样?
编辑:
在十六进制编辑器中打开文件我得到:
FF FE 68 00 00 00 65 00 00 00 6C 00 00 00 6C 00 00 00 6F 00 00 00
Run Code Online (Sandbox Code Playgroud)
看起来我出于某种原因在每个角色之间得到两个额外的字节?
在C++中,我有一个float/double变量.
当我用例如cout打印时,结果字符串是以句点分隔的.
cout << 3.1415 << endl
$> 3.1415
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以强制双重打印逗号?
cout << 3.1415 << endl
$> 3,1415
Run Code Online (Sandbox Code Playgroud) 我有一个简单的类货币与重载运算符<<.我不知道如何将数字与空格每3位数分开,所以看起来像是:"1 234 567 ISK".
#include <cstdlib>
#include <iostream>
using namespace std;
class Currency
{
int val;
char curr[4];
public:
Currency(int _val, const char * _curr)
{
val = _val;
strcpy(curr, _curr);
}
friend ostream & operator<< (ostream & out, const Currency & c);
};
ostream & operator<< (ostream & out, const Currency & c)
{
out << c.val<< " " << c.curr;
return out;
}
int main(int argc, char *argv[])
{
Currency c(2354123, "ISK");
cout << c;
}
Run Code Online (Sandbox Code Playgroud)
我感兴趣的是某种最简单的解决方案.
有谁知道我如何打印和计算我打印的字符数?
说我有一个号码,我通过printf或打印cout.我怎么能算出我打印出来的实际位数?
如何在char缓冲区中只编写每三个项目以便在C++中快速编写文件?
我从相机中获得了三通道图像,但每个通道包含相同的信息(图像为灰度).我想只写一个通道到磁盘以节省空间并使写入更快,因为这是实时数据采集系统的一部分.
C++的ofstream :: write命令似乎只编写连续的二进制数据块,因此我的当前代码会写入所有三个通道并且运行速度太慢:
char * data = getDataFromCamera();
int dataSize = imageWidth * imageHeight * imageChannels;
std::ofstream output;
output.open( fileName, std::ios::out | std::ios::binary );
output.write( data, dataSize );
Run Code Online (Sandbox Code Playgroud)
我希望能够通过以下呼叫替换最后一行:
int skipSize = imageChannels;
output.write( data, dataSize, skipSize );
Run Code Online (Sandbox Code Playgroud)
其中skipSize会导致write只将每三分之一放入输出文件中.但是,我还没有找到任何能够做到这一点的功能.
我很想听听有关将单个频道快速写入磁盘的任何想法.谢谢.
给定一个数字12456789,我需要输出12,456,789没有太多编码.我可以使用C,C++或JavaScript中的任何内置函数吗?