【发布时间】:2015-07-04 21:08:10
【问题描述】:
我有一个程序要求我通过网络发送号码。我正在尝试将它们转换为字符串,然后使用 strstream 再次返回。我遇到的问题是,在从流中取出值时,我似乎正在读取不正确的字节数。我怀疑这可能是由于最初的字符串转换,但我不确定。有谁知道怎么回事?
我的代码如下
int data1 = 98;
float data2 = 0.5f;
std::strstream stream;
stream << data1 << data2;
string networkData = stream.str(); //assume this line is the string transferred over the network
char numberBuffer[4];
int ReadData1;
float ReadData2;
std::strstream otherStream;
otherStream << networkData;
otherStream.read(&numberBuffer[0], sizeof(int)); //reads 980.f
ReadData1 = atoi(numberBuffer); //prodces 980
otherStream.read(&numberBuffer[0], sizeof(float)); //reads 5 followed by junk
ReadData2 = atof(numberBuffer);
【问题讨论】:
-
您应该以二进制字节而不是字符串的形式发送数据。如果您继续使用字符串,那么您可能需要为它们添加长度前缀,以便知道要读取多少个字符。
-
或者在数字之间放一个空格...
-
您是否也在使用特定库通过网络发送数据?你可以使用任何图书馆吗? Google 协议缓冲区可以帮助抽象出这些细节。
-
此外,字符串表示(通常)更大,并且在最终转换为二进制值时不会保持精度(即浮点)。
-
@JamesAdkison 他可能需要在小端和大端之间发送,作为文本发送是一种可能的解决方案。
标签: c++ string c++11 casting stream