Lin*_*ios 3 c++ serialization unpack pack
注意:我知道之前已经多次询问过这个问题,但是这些问题都没有链接到具体的,可移植的,维护的库.
我需要一个实现Python/Ruby/Perl like pack/ unpackfunctions 的C或C++库.这样的图书馆存在吗?
编辑:因为我发送的数据很简单,所以我决定只使用memcpy,指针和hton*函数.我是否需要以char任何方式操纵a 以平台无关的方式通过网络发送它?(char仅用作字节,而不是字符).
在C/C++中,通常你只需要struct以正确的顺序编写各种成员(正确的打包可能需要编译器特定的编译指示),并使用raw fwrite/ fread(或read/ write处理C++流时)将文件转储/读取到文件中.其实,pack和unpack出生阅读用这种方法产生的东西.
如果您需要将结果放在缓冲区而不是文件中,则更容易,只需将结构复制到缓冲区即可memcpy.
如果表示必须是可移植的,那么主要关注的是字节排序和字段打包; 第一个问题可以通过各种hton*函数来解决,而第二个问题可以通过编译器特定的指令来解决.
特别是,许多编译器支持该#pragma pack指令(参见此处的VC++,此处为gcc),它允许您管理编译器可能插入的(不需要的)填充,struct以使其字段在方便的边界上对齐.
但请记住,在某些体系结构上,如果它们的自然边界不对齐,则不允许访问特定类型的字段,因此在这些情况下,您可能需要执行一些手动操作memcpy将原始字节复制到变量正确对齐.