У меня, похоже, проблема с извлечением данных из строкового потока. В начале моего извлечения, кажется, отсутствуют первые два символа.stringstream extract не работает
У меня есть что-то похожее на следующий код:
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», кажется, пропустить первые два символа. Например, в отладчике показано, что строка имеет «001.111.62.2003 ... и т. Д.». Однако после первого «ssnew >> bValid» bValid становится «true», а dValue становится «0.111», а dTime становится «0.62», что указывает на то, что первые два нуля в потоке игнорируются. Почему это не начинается с начала потока?
Приветствия, Сет
это сработало! но разве он не работал по-другому? – Seth
Нет, этого не должно быть. Чтобы понять, почему, предположите, что вы делаете что-то вроде int x = 1, y = 11, z = 111; ss << x << y << z; - это приводит к строке «111111», и поток не может сказать, как извлечь x, y и z, как вам хотелось бы (в отличие от других возможностей). На самом деле: учитывая только эту цепочку, человек тоже не мог сказать. Это просто простая строка, о которой мы говорим; для разделения полей нет разделителей, если вы явно не пишете их. – Reunanen
Чтобы уточнить, причина, по которой она не работает, - это bools, которые иногда рассматриваются как (обычно 8-битные) целые числа, а не отдельные символы. Так, как сказал Пукку, при чтении строки, ищущей «целые числа», невозможно сказать, где остановиться, а другая начинается без пробелов или какого-либо другого разделителя. – SoapBox