簡體   English   中英

序列化Double以便通過UDP傳輸(ARM到x86)

[英]Serializing a Double for transmit over UDP (ARM to x86)

我正在嘗試以某些C ++(QT)代碼序列化Double(在ARM上),然后通過UDP將其發送到x86。 兩種設備均為Little Endian,均運行Linux。 我的問題是,假設兩者都使用IEEE-754是否安全?

我最初的嘗試似乎沒有用。 我做了以下工作,並通過數據報發送了它。

void QSendDouble::Send()
{
   // Start value is 19.231, value increments by 1 each second
   dblval = dblval + 1.0;

   QByteArray packet;
   packet.append('\xAA'); // Start Marker
   packet.append('\xAA'); // Start Marker

   QByteArray data(reinterpret_cast<const char*>(&dblval), sizeof(dblval));
   packet.append(data);

   packet.append('\xFF'); // End Marker
   packet.append('\xFF'); // End Marker

   udpsocket->writeDatagram(packet.constData(), QHostAddress::LocalHost, 7711);
}

我的信念是我做出了一些錯誤的假設。

QT用於發送編碼為字節數組的Double,Python用於接收x86端的字節。

我更新了問題,並使用xxd和netcat觀察了以下數據:

%> nc -l -u -p 2488 | xxd -u -cols 12

00000000: AAAA 4260 E5D0 223B 3440 FFFF  ..B`..";4@..
0000000c: AAAA 4260 E5D0 223B 3540 FFFF  ..B`..";5@..
00000018: AAAA 4260 E5D0 223B 3640 FFFF  ..B`..";6@..
00000024: AAAA 4260 E5D0 223B 3740 FFFF  ..B`..";7@..
00000030: AAAA 4260 E5D0 223B 3840 FFFF  ..B`..";8@..
0000003c: AAAA 4260 E5D0 223B 3940 FFFF  ..B`..";9@..
00000048: AAAA 4260 E5D0 223B 3A40 FFFF  ..B`..";:@..
00000054: AAAA 4260 E5D0 223B 3B40 FFFF  ..B`..";;@..

我使用Christopher Vickery的IEEE 754分析器( https://babbage.cs.qc.cuny.edu/IEEE-754/ )查看這些值。 觀察第一個值,得出的結果是:

Decimal value: 2.023100000000000164845914696343243122100830078125E1

Normalized binary value: 1.010000111011001000101101000011100101011000000100001b4

這是我所期望的。 是的,正如我所期望的那樣,這些值很少是Endian,並且它們已正確傳輸。

因此,罪魁禍首是我最初用來檢查數據的工具( 我可能會麻煩解決 )。

暫無
暫無

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

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