【发布时间】:2019-07-04 12:20:25
【问题描述】:
我编写了一段代码,在位流中连续 6 个“1”后添加一个“0”。但是如何解码呢?
这里是一个比特流的例子:
original = {01101111110111000101111110001100...etc...}
stuffed = {011011111O101110001011111O10001100...etc...}
(“O”代表填充的“0”。)
如您所见,在每个“111111”之后添加了一个“0”,要检索原始流,必须将其删除。简单。
但是...如果原始流与填充流具有相同的形式怎么办?我怎么知道我是否必须删除这些位?!
【问题讨论】:
-
您的输出在第一个“填充”0(标记为 O)之前只有五个 1 位,并且丢失了第六个 1。这是拼写错误,应该有六个 1 位吗?类似的问题困扰着第二个填充的 0;在它之前有五个 1 位,但这次保留了第六个 1 位。你真正想做什么?你的话说明了一件事,而你的示例输出说明了另一件事。
-
如果在您的原始数据流中,您连续有六个 1,然后是零,您的输出将是连续六个 1,然后是两个零。删除零将为您提供原始流。这假设您要解码的所有数据都将首先通过您的编码器。
-
不,没关系。第一位在五个“1”之后填充。 "0110111111011100" => "011011111.O.101110".
-
您的问题文本说“在 6 个连续的 '1' 之后添加一个 '0'”;您的评论文本和您的示例有效地显示“在 5 个连续的 '1' 之后添加一个 '0'”。请决定哪个是正确的并修复另一个。
-
@joe.garage 你为什么要删除 0? 0b01111110 被填充,导致 0b011111010。为什么要删除最后一个 0?
标签: c binary bit avr bitstuffing