0

我目前正在编写程序来通过纠错循环码对消息进行编码和解码。我的算法适用于单个消息,但我在解码字符串时遇到了一些问题。编码和解码工作如下:

  1. 编码算法接收K位,结果返回N位。
  2. 解码算法接收N位并作为结果返回K位。

例如,我想对字符串进行编码和解码。我将字符串转换为字节数组并逐位读取,直到读取 K 位。然后我对这个K位进行编码,并在字节数组中逐位写入所有接收到的N位。等等。解码是相同的,但我解码N位并在字节数组中逐位写入K位。有一个我的问题的例子。

如果 K = 9 (每行都是K的长度来可视化我的问题)

0 ][ 11100000 ]
00 ][ 0011101
010 ][ 111000
0000 ][ 00111
11010 ][ 1110
111010 ][ 001
0111010 ][ 11
_ __ _ __ _ _ [ 0

最后一行有一个零,它不适合前 9 位。所以我将它编码为完整的K位消息。当然,解码后我收到K位消息并出现额外的字节。

[ 00000000 ][ 0

而且我不知道如何确定这个额外的字节。可能这个零字节在编码之前就在那里。你能给我一些建议,我应该如何处理我的问题。也许我应该改变我的算法(也许我不应该一点一点地阅读它)。我会很感激任何帮助。谢谢。

4

2 回答 2

0

基于可变长度比特序列的编码算法在“自然”中相当普遍。在 Rosetta Code中查看Bitwise IO的解决方案,它们可能会给您一些想法。

于 2012-05-02T14:19:18.150 回答
0

我决定用 0xFF 字节填补这个空白。我使用 UTF8 编码,它不能有 0xFF 字节,所以我在解码后删除了消息末尾的所有 0xFF 字节。

于 2012-05-09T12:53:46.537 回答