ストリングストリームからデータを抽出する際に問題があるようです。私の抽出の開始は、最初の2文字が欠けているようです。ストリングストリーム抽出が機能しない
私は、次のコードに似た何かを持っている:私は「ssnew」からデータを読み込むときに、私は抽出演算子を使用する場合、最初の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
}
を。たとえば、デバッガでは、stringstreamに "001.111.62.2003 ... etc"が表示されています。しかし、最初の "ssnew >> bValid" bValidが "true"になり、dValueが "0.111"になり、dTimeが "0.62"になってストリームの最初の2つのゼロが無視されていることを示します。なぜストリームの始めから始まっていないのですか?
乾杯、 セス
これは機能しました!それは他の方法で働くべきではありませんか? – Seth
いいえ、それはありません。理由を理解するために、int x = 1、y = 11、z = 111のようなことをすると仮定します。 ss << x << y << z; - これは文字列 "111111"をもたらし、ストリームはx、y、zを(他の可能性とは対照的に)好きなように抽出する方法を教えてくれません。実際には、文字列だけでは、人間は誰にも言えませんでした。これは実際にここで話している単純な文字列です。あなたが明示的に何かを書いていない限り、フィールドを区切るデリミタはありません。 – Reunanen
詳しくは、boolは時には(通常は8ビットの)整数として扱われ、単一の文字ではないという理由で動作しません。だからPukkuが言ったように、 "整数"を探している文字列を読むときは、どこが停止し、別のものがスペースや他の区切り文字なしで始まるかを知ることは不可能です。 – SoapBox