Qt 如何高效地将double*数据转换为const char*或QByteArray

Qt 如何高效地将double*数据转换为const char*或QByteArray,qt,reinterpret-cast,qbytearray,Qt,Reinterpret Cast,Qbytearray,我试图在我的项目中使用Qt中的网络编程API。代码的一部分要求我将double*数据转换为QByteArray或const char* 我搜索了stackoverflow问题,发现很多人都在建议这段代码: QByteArray array(reinterpret_cast<const char*>(data), sizeof(double)); QByteArray数组(重新解释数据类型),大小(双精度); 或者,对于双精度阵列: QByteArray::fromRawData(

我试图在我的项目中使用Qt中的网络编程API。代码的一部分要求我将double*数据转换为QByteArray或const char*

我搜索了stackoverflow问题,发现很多人都在建议这段代码:

QByteArray array(reinterpret_cast<const char*>(data), sizeof(double));
QByteArray数组(重新解释数据类型),大小(双精度);
或者,对于双精度阵列:

QByteArray::fromRawData(reinterpret_cast<const char*>(data),s*sizeof(double));
QByteArray::fromRawData(重新解释转换(数据),s*sizeof(双精度));
当我在函数中使用它们时,它不会给我期望的结果。输出似乎是随机字符

请建议一种在Qt中实现它的有效方法。非常感谢您抽出时间

问候
Alok

如果您只需要将双精度编码和解码到字节数组中,则此操作有效:

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);
双值=3.14159275;
//将值编码到字节数组中
QByteArray byteArray(重新解释铸件和价值),尺寸(双);
//解码值
双重价值;
//将数据从字节数组复制到双精度数组中
memcpy(&outValue,byteArray.data(),sizeof(double));
printf(“%f”,outValue);
然而,这并不是通过网络发送数据的最佳方式,因为它将取决于机器如何编码双类型的平台细节。我建议你看看这个课程,它可以让你做到这一点:

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);
双值=3.14159275;
//将值编码到字节数组中
QByteArray byteArray;
QDataStream(和byteArray、QIODevice::WriteOnly);
流>超值;
printf(“%f”,outValue);

现在这是独立于平台的,流操作符使它非常方便和易于阅读。

假设您想要创建一个人类可读的字符串:

double d = 3.141459;
QString s = QString::number(d); // method has options for format and precision, see docs
或者,如果您需要本地化,而locale是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

你需要什么?这些双精度的二进制表示(如果需要深度复制,您的代码可能存在内存管理问题,请使用
QByteArray::QByteArray(const char*data,int size)
),或者您需要将其转换为这些值的文本表示形式(@Silicomancer-answer)?我建议您准确描述您正在使用这些数据做什么。