[英]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.