C++ stringstream写入跳过空白

C++ stringstream写入跳过空白,c++,C++,我的印象是,未格式化的write()会将字节逐字复制到调用它的ostream。另一位用户也告诉我,写函数不会跳过任何内容。如果您在使用stringstream时遇到问题,请提问。” 然而,在最近使用stringstream的一些代码中,我发现情况并非如此 #include <iostream> #include <fstream> #include <sstream> #include <algorithm> #include <iterat

我的印象是,未格式化的
write()
会将字节逐字复制到调用它的
ostream
。另一位用户也告诉我,写函数不会跳过任何内容。如果您在使用
stringstream
时遇到问题,请提问。”

然而,在最近使用
stringstream
的一些代码中,我发现情况并非如此

#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <iterator>

int main()
{
    {
        const std::string msg = "This is a secret message!";
        std::stringstream ss;
        const int size = msg.size();
        // ss << std::noskipws;
        ss.write( reinterpret_cast<const char*>(&size),sizeof( size ) );
        ss.write( msg.data(),msg.size() );

        std::ofstream out( "secret.txt",std::ios::binary );
        std::transform( std::istream_iterator<char>( ss ),std::istream_iterator<char>(),
                        std::ostream_iterator<char>( out ),[]( const char c ) { return c + 113; } );
    }

    {
        std::stringstream ss;
        std::ifstream in( "secret.txt",std::ios::binary );
        std::transform( std::istream_iterator<char>( in ),std::istream_iterator<char>(),
                        std::ostream_iterator<char>( ss ),[]( const char c ) { return c - 113; } );
        int size;
        ss.read( reinterpret_cast<char*>(&size),sizeof( size ) );
        std::string msg( size,'@' );
        ss.read( &msg[0],size );
        std::cout << "Decoded message is: " << msg << std::endl;
    }

    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
{
const std::string msg=“这是一条秘密消息!”;
std::stringstream-ss;
常量int size=msg.size();

//ss这与
write
stringstream
无关

读取字符时,
std::istream_迭代器默认跳过空白(除非使用
std::noskipws
或等效工具禁用),而
std::istreambuf_迭代器
则没有。此外,
std::istreambuf_迭代器
效率更高,因为它避免了每个字符构造和销毁一次sentry对象的开销


您过度设计了测试用例。请在编写后尝试
std::string check=ss.str();