在Struct或Union上使用ntohl

时间:2011-10-26 14:48:17

标签: c++ linux endianness uint32-t

ntohl需要uint32_t。我有许多不同成员的消息(类型为uint32_tuint16_t)。是否可以正确传递收到的所有structunion并将其转换为uint32_t然后reinterpret_cast转换为union或{{1} }}?

我一直在做的是逐行列出structunion的每个成员,并将其传递给ntohl / s,就像这样struct但是很麻烦!

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

当我尝试时,

msg.member = ntohl(msg.member);

编译器抱怨说:

  

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

您可以使用Google的Protocol Buffers