簡體   English   中英

在C / C ++中打破UDP傳輸中的雙精度數字

[英]breaking up double precision numbers in UDP transfer in C/C++

我的程序當前發送和接收UDP數據包,並在接收它們時將它們分解為16位塊,以便處理傳入的數據。 該輸入數據的一部分是兩個雙精度數字(本機上為64位)。 如何將16位塊重組為雙精度格式? 它們以這種格式發送給我,但我發現我無法通過“或”運算,移位位等來重新組合,但一次只能接收16位。 任何想法?

因此我收到的傳入數據包將具有64位雙精度數字,但一次只能讀取16位:0x9080 0x1145 0x42AF 0x45F3-我需要將它們重新組合成雙精度數字。

到目前為止,這是我嘗試過的:“ 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;
        }

我意識到這段代碼是不正確的,但是在學習之前我不得不嘗試一下。

如果您只是接收原始位,請將它們存儲為無符號的long long類型。

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

然后,當您需要將其解析為雙精度型時,請重新解釋這些位。

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

使用union或reinterpret_cast,填充16位數組,並用作double:

union U
{
  double d;
  short i[4];
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM