1

ntohl需要一个uint32_t. 我有许多不同成员(类型为uint32_tor uint16_t)的消息。是否可以正确传递整个收到的structorunion并将其转换为 sayuint32_t然后reinterpret_cast转换为 my unionor struct

我的做法是逐行列出unionor的每个单独成员,struct然后像这样将其传递给 ntohl/s,msg.member = ntohl(msg.member);但这很麻烦!

数据结构从 C# .NET 应用程序 (Windows) 整体传输到 Linux 应用程序。

当我尝试时,

void* ptr = &msg;
uint32_t temp = (uint32_t)ptr;

编译器抱怨说:

错误:从 'void*' 转换为 'uint32_t' 失去精度

4

2 回答 2

6

不,你不能。仅在您的结构仅包含一个uint32_t变量的情况下。此外,您必须ntoh<X>根据不同的变量大小使用不同的函数。

于 2011-10-26T14:54:25.550 回答
0

您可以使用 Google 的Protocol Buffers

于 2011-10-26T14:57:17.093 回答