2

文字列ストリームからのデータの抽出に問題があるようです。抽出の開始時に最初の 2 文字が欠落しているようです。

次のコードに似たものがあります。

    std::stringstream ss(
    std::stringstream::in |
    std::stringstream::out
    );

    bool bValid;
    double dValue;
    double dTime;

    for( (int i = 0; i < 5; i++ )
    {
        bValid = getValid();
        dValue = getValue();
        dTime = getTime();

        // add data to stream
        ss << bValid;
        ss << dValue;
        ss << dTime;
    }

    int strsize = ss.str().size();
    char* data = new char[strsize];
    std::strcpy(data, ss.str().c_str());

    // then do stuff with data
    // ...... store data in an Xml Node as CDATA

    // read data back
    std::stringstream ssnew( std::stringstream in | std::stringstream out );
    ss.clear();
    ss << getCharData(); // returns a char* and puts it in stream.

    for( int i = 0; i < 5; i++ )
    {
        ssnew >> bValid;  // do something with bValid
        ssnew >> dValue;  // do something with dValue
        ssnew >> dTime;   // do something with dTime
    }

「ssnew」からデータを読み取るときに抽出演算子を使用すると、最初の 2 文字がスキップされるように見えるという問題があります。たとえば、デバッガーでは、stringstream に「001.111.62.2003... など」が含まれていることが示されています。ただし、最初の "ssnew >> bValid" の後、bValid は "true" になり、dValue は "0.111" になり、dTime は "0.62" になり、ストリームの最初の 2 つのゼロが無視されることを示します。ストリームの最初から開始しないのはなぜですか?

乾杯、セス

4

2 に答える 2

2

試す:

    // add data to stream
    ss << bValid << " ";
    ss << dValue << " ";
    ss << dTime << " ";
于 2009-07-20T06:46:54.920 に答える
0

元のコードが機能しなかった理由は、抽出が貪欲でssnew >> bValid、「001」をむさぼり食ったためです。

strstream は廃止され、stringstream が優先されることに注意してください。

于 2009-07-20T07:07:07.420 に答える