Google Protocol Buffer 为这个问题提供了一个很好的解决方案。参考这里Google Protobol Buffer - C Implementaion
根据负载的结构创建一个 .proto 文件并将其保存为 payload.proto
syntax="proto3"
message Payload {
int32 age = 1;
string name = 2;
} .
使用
编译 .proto 文件
protoc --c_out=. payload.proto
这将在您的目录中创建头文件 payload.pb-c.h 及其对应的 payload.pb-c.c。
创建您的 server.c 文件并包含 protobuf-c 头文件
#include<stdio.h>
#include"payload.pb.c.h"
int main()
{
Payload pload = PLOAD__INIT;
pload.name = "Adam";
pload.age = 1300000;
int len = payload__get_packed_size(&pload);
uint8_t buffer[len];
payload__pack(&pload, buffer);
// Now send this buffer to the client via socket.
}
在您的接收方client.c
....
int main()
{
uint8_t buffer[MAX_SIZE]; // load this buffer with the socket data.
size_t buffer_len; // Length of the buffer obtain via read()
Payload *pload = payload_unpack(NULL, buffer_len, buffer);
printf("Age : %d Name : %s", pload->age, pload->name);
}
确保使用 -lprotobuf-c 标志编译程序
gcc server.c payload.pb-c.c -lprotobuf-c -o server.out
gcc client.c payload.pb-c.c -lprotobuf-c -o client.out