gpt4 book ai didi

c++ - 在 C/C++ 中分解 UDP 传输中的 double

转载 作者:行者123 更新时间:2023-11-28 06:07:23 25 4
gpt4 key购买 nike

我的程序目前发送和接收 UDP 数据包,并在接收到它们时将它们分解为 16 位 block ,以便处理传入数据。传入数据的一部分是两个 double 字(在我的机器上是 64 位)。如何将 16 位 block 重新组合为 double 格式?它们以那种格式发送给我,但我发现我无法通过 OR 运算、移位等方式重新组合,但我一次只能接收 16 位。有什么想法吗?

所以我收到的传入数据包将有一个 64 位 double ,但一次读取 16 位:0x9080 0x1145 0x42AF 0x45F3 - 我需要将它们组合回一个 double 。

到目前为止,这是我尝试过的:“in_data”是指向我传入的 UDP 数据包的 16 位指针...

        double cal1 = 0;
double cal2 = 0;

for (int i = 0; i < 4; i++)
{
in_data++;
cal1 |= *in_data;
if (i < 3) cal1 << 16;
}

for (int i = 0; i < 4; i++)
{
in_data++;
cal2 |= *in_data;
if (i < 3) cal2 << 16;
}

我意识到这段代码是不正确的,但在我学会它之前我必须尝试一下。

最佳答案

如果您只是接收原始位,请将它们存储在 unsigned long long 类型中。

unsigned long long bits;
bits |= packet1;
bits |= packet2 << 16;
bits |= packet3 << 32;
bits |= packet4 << 48;

然后,当您需要将其解析为 double 值时,重新解释这些位。

long double input = *((long double*)&bits);

关于c++ - 在 C/C++ 中分解 UDP 传输中的 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124467/

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