【发布时间】:2016-11-09 21:34:19
【问题描述】:
处理放入 uint8 缓冲区的可变位数数据序列化的最简单方法是什么?
例如,前 4 位是一个变量,那么 1 位是布尔值,另一个是 3 位长。然后你有一个 8 字节的数组,然后是一个 13 位的变量,依此类推。所有这些都将被写入一个 unsigned char 缓冲区以通过套接字发送。
变量数据类型有时不会在 8 位 -16 位边界上对齐,它们的位数很奇怪,例如 7 位长、13 位长、3 位长等。
最好用 C 语言编写一些东西,还是使用第三方库?
【问题讨论】:
-
什么? XML 对您来说还不够好? :)
-
我肯定会使用缓冲区的某些部分作为每个变量的标头。标头将存储数据类型的长度,可能还有一个枚举 int 来表示数据类型。然后,您可以编写一个转换函数以在需要时进行类型转换。
-
@infixed:你不能在所有平台上都使用 XML! XML 太臃肿了。
-
@Olaf 这显然是个玩笑,看笑脸。显然,OP 正在尝试创建一种非常紧凑的格式,而 XML 是它的对立面。
-
查找 TLV(类型长度值)编码技术。您可以在每条消息的级别执行“类型”,因此消息类型 1 表示 4+1+3+8x8+13 位,可以在没有太多长度的情况下解包。或者您可以将每组位编码为 8 位的倍数,并在它们前面加上“类型位”和“长度 N”,其中 N 以合适的位数编码,等等。选项是无穷无尽的;这取决于消息的多样性,以及大量客户编码器和解码器与一个通用编码器和一个通用解码器的相对成本。
标签: c serialization bit-manipulation