【发布时间】:2015-06-24 15:52:26
【问题描述】:
我正在尝试通过 udpSendSocket 在数据报中发送一些双精度。数据来自 QT GUI 并被发送到 VS2013 驱动程序(均在 C++ 中)。我正在使用 QDataStream 将数据放入 QByteArray 中,然后将其发送出去。一切都适用于整数,但我不能让它适用于双打。
我已经确认我的传输代码可以正常工作,以便驱动程序接收数据报中的任何内容,因此我正在 QT 程序中进行所有测试。
起初我将一个 double 直接发送到声称使用 IEEE 754 的 QDataStream,然后使用 *reinterpret_cast 将其转换回一个 double。
// QT Program
QByteArray datagram;
QDataStream out(&datagram, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_1);
out.setFloatingPointPrecision(QDataStream::SinglePrecision);
double test = 0.3;
out << test;
double recv = *reinterpret_cast<double*>(&datagram);
recv = 2.32e-317。
在那之后没有工作,我专注于尝试将双精度字节数组转换回双精度。多个消息来源让我相信这会奏效,但事实并非如此。
double test = 0.3;
unsigned char const* bytes = reinterpret_cast<unsigned char const*>(&test);
double recv = *reinterpret_cast<double*>(&bytes);
recv = 1.33e-317。
sizeof(double) 返回 8。
reinterpret_cast 我做错了什么?我应该以不同的方式进行这种转换吗?有什么建议吗?
谢谢
【问题讨论】:
-
谢谢 AndyG 和 Angew。您的两个回答都非常有帮助。
标签: c++ qt casting udp reinterpret-cast