gpt4 book ai didi

c++ - 使用 C++ 和 Qt 通过 UDP 发送浮点变量

转载 作者:行者123 更新时间:2023-11-30 05:45:26 24 4
gpt4 key购买 nike

你好,如你所见,我是新来的(在 C++ 和 Qt 中)。

请帮助我,我想通过 UDP 从我的应用程序向 X-Plane(飞行模拟器)发送一些命令。简而言之,我需要发送这样的消息:

DREF0XXXXsim/joystick/yoke_roll_ratio

其中 XXXX 是四个字节的浮点值。问题是,当我发送一个像 0 或 0.5 这样的浮点值时,在这些值中一些字节是 0(?)并且 c++ 认为这是消息的结尾。

我使用 memcpy 将浮点值更改为 4 个字节(char),但如果其中一些是 0 我的消息结束。

其他值(例如 0.1、0.2 等)都可以。我发现我可以将零更改为例如1 但在那种情况下,当我发送 0.5 值时,我收到 0.50392(当我发送 0.4 时,我收到 0.4000000)。

我使用 Qt 库和这个函数来发送数据:

socket->writeDatagram(const char * data, qint64 size, const QHostAddress & address, quint16 port)

问题是 - 如何发送零字节或浮点值,如 0.5 或 0?

最佳答案

I use memcpy to change float value into 4 bytes (char), but in case that some of them are 0 my message end.

不,你不知道。 memcpy 复制内存,在您的例子中是构成 float 的 4 个字节。您不必这样做就可以在 writeDatagram 等地方使用该内存:

writeDatagram(const char * data, qint64 size, const QHostAddress & address, quint16 port)

signature , 所以你可以直接调用

writeDatagram(reinterpret_cast<const char*>(myfloat_pointer), 4, ....)

UDP 和 Qt 真的不关心数据里面有什么,所以你的 0 字节问题来自其他东西——我怀疑你的 memcpy 机制;您是否有机会使用 strlen 或其他东西来确定要复制多少内存?

关于c++ - 使用 C++ 和 Qt 通过 UDP 发送浮点变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29367511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com