QT 中字节数组到双精度转换失败
Byte Array to Double Conversion fails in QT
当我转换从 TCP 通信接收到的以下字节时,我在 QT 中得到 0,在 C#.NET 中得到 32.097133442517112。我如何在 QT 中解决这个问题?
C#.NET
byte[] data = {0xbd, 0x7a, 0x5f, 0xde, 0x6e, 0x0c, 0x40, 0x40};
double value = BitConverter.ToDouble(data, 0); // value is 32.097133442517112
C++ QT
QByteArray *arr = new QByteArray();
arr->append(0xbd);
arr->append(0x7a);
arr->append(0x5f);
arr->append(0xde);
arr->append(0x6e);
arr->append(0x0c);
arr->append(0x40);
arr->append(0x40);
double value = arr->toDouble(); // value is 0
编辑:
以下片段似乎工作正常。结果为 32.0971。
union {
double d;
char bytes[sizeof(double)];
} u;
u.bytes[0]=0xbd;
u.bytes[1]= 0x7a;
u.bytes[2]=0x5f;
u.bytes[3]=0xde;
u.bytes[4]=0x6e;
u.bytes[5]=0x0c;
u.bytes[6]= 0x40;
u.bytes[7]=0x40;
qDebug()<<u.d; // result 32.0971
我应该继续这个,还是有任何 QT 方面的解决方案?
我认为 QByteArray::toDouble()
只适用于可读的双精度值(比如 3.14)所以 Converting char * to double while reading from binary file in C++? 应该给你一个如何完成的提示
好的,QDataStream 做到了:
double value2;
QDataStream stream(*arr);
stream.setByteOrder(QDataStream::LittleEndian);
stream >> value2; // value2 is 32.097133442517112
感谢贡献者。
当我转换从 TCP 通信接收到的以下字节时,我在 QT 中得到 0,在 C#.NET 中得到 32.097133442517112。我如何在 QT 中解决这个问题?
C#.NET
byte[] data = {0xbd, 0x7a, 0x5f, 0xde, 0x6e, 0x0c, 0x40, 0x40};
double value = BitConverter.ToDouble(data, 0); // value is 32.097133442517112
C++ QT
QByteArray *arr = new QByteArray();
arr->append(0xbd);
arr->append(0x7a);
arr->append(0x5f);
arr->append(0xde);
arr->append(0x6e);
arr->append(0x0c);
arr->append(0x40);
arr->append(0x40);
double value = arr->toDouble(); // value is 0
编辑: 以下片段似乎工作正常。结果为 32.0971。
union {
double d;
char bytes[sizeof(double)];
} u;
u.bytes[0]=0xbd;
u.bytes[1]= 0x7a;
u.bytes[2]=0x5f;
u.bytes[3]=0xde;
u.bytes[4]=0x6e;
u.bytes[5]=0x0c;
u.bytes[6]= 0x40;
u.bytes[7]=0x40;
qDebug()<<u.d; // result 32.0971
我应该继续这个,还是有任何 QT 方面的解决方案?
我认为 QByteArray::toDouble()
只适用于可读的双精度值(比如 3.14)所以 Converting char * to double while reading from binary file in C++? 应该给你一个如何完成的提示
好的,QDataStream 做到了:
double value2;
QDataStream stream(*arr);
stream.setByteOrder(QDataStream::LittleEndian);
stream >> value2; // value2 is 32.097133442517112
感谢贡献者。