c - 使用 malloc 在 C 中进行序列化

标签 c sockets serialization memory-management tcp

在整个网络上搜索在 C 中序列化数据的方法,以便我可以通过 TCP/IP 套接字发送结构,但我找不到任何简单的方法。但我认为通过这种方式,您可以固定数据包中位的位置,从而“事实上”将其序列化。

packet *datapkt = NULL;
datapkt = (packet*)malloc(PKT_SIZE); // Allocation of memory with this size
datapkt->field = data;
......
send(datapkt);
free(datapkt);

谁能告诉我这是否是个好主意?到目前为止,它正在我的项目中工作。

提前致谢!

最佳答案

这样做时,您必须考虑两件事:

1. Endianness
2. Compiler padding

第一点将使数据根据系统的字节顺序采用不同的形式。对于大于一个字节的类型,这是一个问题。

对于第二点,您需要确保编译器没有在结构的成员之间添加任何字节。这可以通过编译器编译指示来完成。

关于c - 使用 malloc 在 C 中进行序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41360104/

相关文章:

c - 合并排序期间的运行时错误

C - Xcode 中的重定义错误

java - 错误: remoteAddress not set - jreactive-8583

c# - 在存储到 Redis 之前是否使用 protobuf-net 序列化原语

c# - 如何分析二进制序列化流的内容?

java - Jackson 反序列化 convertValue 与 readValue

c - 我在 Linux (Centos) 下的 C 中运行时出现错误 "Cannot assign requested address"

c - 指向结构时如何正确使用 malloc() 和 realloc()?

c - 在不关闭套接字的情况下停止阻塞接收

python - 发送到未监听的ip/port时,Python的UDP崩溃