Pregunta

Me parece estar teniendo un problema con la extracción de datos de un stringstream. El comienzo de mi extracción parece ser que faltan los dos primeros caracteres.

Tengo algo similar al código siguiente:

    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
    }

Estoy teniendo un problema que cuando se utiliza el operador de extracción al leer los datos de "ssnew" que parece ignorar los dos primeros caracteres. En el depurador, por ejemplo, se está demostrando que el stringstream tiene "001.111.62.2003 ... etc". Sin embargo, después de la primera "ssnew >> bValid" bValid se convierte en "verdadero" y se convierte en dValue "0,111" y dTime se convierte en "0,62" lo que indica que los dos primeros ceros en la corriente están siendo ignorados. Por qué no está comenzando a principios de la corriente?

Cheers, Seth

¿Fue útil?

Solución

Probar:

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

Otros consejos

La razón de su código original no funcionó es que la extracción era codicioso, por lo ssnew >> bValid engullido el "001".

Tenga en cuenta que strstream está en desuso en favor de stringstream.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top