在Struct或Union上使用ntohl

1 c++ linux endianness uint32-t

ntohl需要一个uint32_t.我有许多不同成员(类型uint32_tuint16_t)的消息.是否有可能正确地传递所有收到的struct或者union转换成说出uint32_t然后reinterpret_cast进入我的unionstruct

我一直在做的是逐行列出,union或者struct将每个成员传递给ntohl/s,msg.member = ntohl(msg.member);但这很麻烦!

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

我试过的时候

void* ptr = &msg;
uint32_t temp = (uint32_t)ptr;
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说:

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

Tio*_*epe 6

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