stringstream extracción no funciona
-
18-09-2019 - |
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
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.