在现代软件开发中,Protocol Buffers(简称 Protobuf)是一种由 Google 开发的轻量级、高效的数据交换格式。它常用于网络通信和数据存储场景。虽然 Protobuf 官方主要支持 C++、Java 和 Python,但它也提供了 C语言 Protocol Buffers 教程 所需的底层 C API —— 即 protobuf-c。本文将带你从零开始,使用 C 语言实现 Protobuf 的基本功能。

C 语言因其高效、低资源占用的特性,广泛应用于嵌入式系统、操作系统、驱动程序等场景。而 嵌入式系统序列化 正是 Protobuf 的强项之一:相比 JSON 或 XML,Protobuf 体积更小、解析更快,非常适合资源受限的设备。
要使用 C 语言操作 Protobuf,你需要安装两个工具:
protoc:Google 官方的 Protobuf 编译器(用于生成代码)protobuf-c:C 语言运行时库在 Ubuntu/Debian 系统中,可通过以下命令安装:
sudo apt-get install protobuf-compiler libprotobuf-devsudo apt-get install protobuf-c-compiler libprotobuf-c-dev我们先创建一个简单的消息结构。新建文件 person.proto:
syntax = "proto3";message Person { string name = 1; int32 id = 2; string email = 3;}使用 protoc-c 编译器生成 C 代码:
protoc --c_out=. person.proto执行后会生成两个文件:person.pb-c.c 和 person.pb-c.h。它们就是我们在 C 程序中使用的接口。
创建 main.c 文件,内容如下:
#include <stdio.h>#include <stdlib.h>#include "person.pb-c.h"int main() { // 初始化 Person 消息 Person person = PERSON__INIT; person.name = "Alice"; person.id = 123; person.email = "alice@example.com"; // 序列化:将结构体转为字节流 size_t len = person__get_packed_size(&person); uint8_t *buffer = malloc(len); person__pack(&person, buffer); printf("Serialized size: %zu bytes\n", len); // 反序列化:从字节流还原结构体 Person *new_person = person__unpack(NULL, len, buffer); if (new_person) { printf("Name: %s\n", new_person->name); printf("ID: %d\n", new_person->id); printf("Email: %s\n", new_person->email); person__free_unpacked(new_person, NULL); } free(buffer); return 0;}使用 gcc 编译程序,注意链接 protobuf-c 库:
gcc -o main main.c person.pb-c.c -lprotobuf-c./main输出应为:
Serialized size: 32 bytesName: AliceID: 123Email: alice@example.com.proto 文件使用 proto3 语法,因为 protobuf-c 对 proto2 支持有限。xxx__free_unpacked() 释放内存。通过本教程,你已经掌握了如何在 C 语言中使用 Protocol Buffers 进行数据序列化与反序列化。这项技能对于开发高性能、低延迟的系统(如物联网设备或实时通信模块)至关重要。如果你正在寻找一种比 JSON 更高效的 嵌入式系统序列化 方案,Protobuf + C 是一个极佳的选择。
希望这篇 Protocol Buffers C语言使用 教程对你有所帮助!掌握 protobuf C API 后,你可以轻松构建跨平台、高兼容性的数据通信协议。
本文由主机测评网于2025-12-06发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123766.html