我正在尝试在我的项目中使用Qt中的网络编程API。我的代码的一部分要求我将double *数据转换为QByteArray或const char *。
我搜索了stackoverflow问题,可以找到很多人建议这段代码:
QByteArray array(reinterpret_cast<const char*>(data), sizeof(double));
或者,对于double的数组:
QByteArray::fromRawData(reinterpret_cast<const char*>(data),s*sizeof(double));
当我在我的功能中使用它时,它没有给出我想要的结果。输出似乎是随机字符。
请建议在Qt中实施它的有效方法。非常感谢您的宝贵时间。
此致 阿洛克
答案 0 :(得分:2)
如果您只需要将double编码并解码为字节数组,则可以正常工作:
double value = 3.14159275;
// Encode the value into the byte array
QByteArray byteArray(reinterpret_cast<const char*>(&value), sizeof(double));
// Decode the value
double outValue;
// Copy the data from the byte array into the double
memcpy(&outValue, byteArray.data(), sizeof(double));
printf("%f", outValue);
但是,这不是通过网络发送数据的最佳方式,因为它取决于机器如何编码双重类型的平台细节。我建议您查看QDataStream类,它允许您执行此操作:
double value = 3.14159275;
// Encode the value into the byte array
QByteArray byteArray;
QDataStream stream(&byteArray, QIODevice::WriteOnly);
stream << value;
// Decode the value
double outValue;
QDataStream readStream(&byteArray, QIODevice::ReadOnly);
readStream >> outValue;
printf("%f", outValue);
现在这与平台无关,流操作符使其非常方便易读。
答案 1 :(得分:1)
假设您要创建一个人类可读的字符串:
double d = 3.141459;
QString s = QString::number(d); // method has options for format and precision, see docs
或者如果您需要本地化是QLocale对象的本地化:
s = locale.toString(d); // method has options for format and precision, see docs
如果确实需要,您可以使用s.toUtf8()或s.toLatin1()轻松地将字符串转换为QByteArray。如果速度很重要,还有:
QByteArray ba = QByteArray::number(d); // method has options for format and precision, see docs