序列化双精度以通过 UDP(ARM 到 x86)传输
Serializing a Double for transmit over UDP (ARM to x86)
我正在尝试在某些C++(QT(代码中序列化双精度(在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 Analyzer(https://babbage.cs.qc.cuny.edu/IEEE-754/(来查看这些值。查看它产生的第一个值,结果为:
Decimal value: 2.023100000000000164845914696343243122100830078125E1
Normalized binary value: 1.010000111011001000101101000011100101011000000100001b4
这就是我所期望的。是的,正如我所期望的那样,这些值是小字节序,并且它们正在正确传输。
所以罪魁祸首是我最初用来检查数据的工具(我可以排除故障(。
相关文章:
- 为x86而非x64编译时出错
- 在用于格式4的arm模拟器中实现功能时的一个问题
- C++如何仅使用MOV在x86上实现发布和获取
- 海湾合作委员会 ARM 性能下降
- 如何在带有 gdb GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb 会话?
- 在 c++ 中使用 x86 DIV 的这个 asm 块有什么用?
- 在AAPCS(ARM ABI)下,C/C++结构填充的稳定性如何
- 在 x86 上实现 std::atomic_thread_fence(std::memory_order_seq_cst
- 如何将C++子例程链接到 x86 程序集程序?
- ARM 上的无锁 SPSC 队列实现
- OpenCV Tracker 属性访问在 ARM 上因 SEGFAULT 而失败,但在 X86_64 中工作
- 如何在 x86 处理器上实现"锁定添加"
- 如何为在 x86 主机上为 arm 目标交叉编译的项目安装依赖项
- 序列化双精度以通过 UDP(ARM 到 x86)传输
- 组件X86转换为ARM功能呼叫,其中有不同数量的参数为ARM
- C DLL通过C#UWP应用程序中的Win运行时组件适用于ARM,但对于X86/X64不适用于
- 无法为 x86 编译代码,但可以为 arm 编译代码
- arm和x86体系结构中的c/c++语言有什么不同
- 从我的 C/C++ 代码 - x86 和 ARM 获取程序集等效代码
- ARM平台的数据转换(从x86/x64)