gpt4 book ai didi

c - C 缓冲区内的可变长度数据类型

转载 作者:行者123 更新时间:2023-11-30 21:00:35 25 4
gpt4 key购买 nike

处理放入 uint8 缓冲区的可变位数数据的序列化的最简单方法是什么?

例如,前 4 位是一个变量,然后 1 位是 bool 值,另一位是 3 位长。然后你有一个 8 字节的数组,然后是一个 13 位变量等等。所有这些都将被写入一个无符号字符缓冲区,以便通过套接字发送。

变量数据类型有时不会在 8 位 -16 位边界上对齐,它们具有奇怪的位数,例如 7 位长、13 位长、3 位长等。

最好用 C 语言为此编写一些东西,还是使用第三方库?

最佳答案

最困难的部分确实是长度的编码。

例如,如果长度从未超过 255 位(假设没有零位选项),那么您将采用流中接下来的 8 位来获取长度,然后获取该位数值。

您也可以分段进行。使用零作为长度意味着长度大于 255。因此,您读取 255 位,然后将这些前缀添加到下一个段(具有类似定义的长度),这样您就可以根据需要保持链接,

如果您想要更高级,并且您有一组已知的位长度需要处理,您可以制作 Huffman Code来表示长度,然后将霍夫曼编码与实际位值交替。

但这需要提前知道可能的长度。但你也可以保留一个霍夫曼代码来表示“链接到下一个”

您甚至可以使用霍夫曼编码来实现上面评论中的 ASCII 方案,但用霍夫曼代码替换“0”、“1”和“x”

单个零位的序列意味着字段中的下一位是“0”

一个序列后跟另一个序列意味着下一位是“1”

由 1 后跟 0 组成的序列可能与“x,字段结束”含义相同

关于c - C 缓冲区内的可变长度数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40516396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com