24小时热门版块排行榜    

查看: 1108  |  回复: 11

无知飞鱼

银虫 (初入文坛)

[求助] 信源编码怎么运用到实际 已有2人参与

各位大神,最近看了一些关于霍夫曼编码的介绍和代码实现。但是看到的编码结果都是以字符数组的形式存放的,而我们实际中编码的结果不应该是以二进制位来存放么?怎么把这种字符串形式的编码转换成直接对二进制位的操作呢?

看过一些霍夫曼编码实现过程,比如A对应的编码是0010,一般编码实现时是分别将‘0’、‘0’、‘1’、‘0’作为占有八位二进制位的字符放进字符数组中;但是我们实际编码时应该是把它们分别当做一位二进制位来看,把编码结果放到二进制数据流中。前一种编码后就占了4*8=32位二进制位了,而我们实际想要得到的应该是4位二进制位不是么?请问应该怎样操作呢?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

无知飞鱼

银虫 (初入文坛)

有人解答一下么。。。。。。。。
2楼2015-04-21 11:28:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

无知飞鱼

银虫 (初入文坛)

有人解答一下么。。。。。。。。
3楼2015-04-21 14:14:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ll550

木虫 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
首先一个byte可以表示0-255中任意一个数。输入一串byte到huffman encoder之后,输出得到一串编码后的byte。

不是所有的编码输入输出都是0和1组成的。RS code也是类似的。
livelong
4楼2015-04-21 14:43:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

无知飞鱼

银虫 (初入文坛)

引用回帖:
4楼: Originally posted by ll550 at 2015-04-21 14:43:44
首先一个byte可以表示0-255中任意一个数。输入一串byte到huffman encoder之后,输出得到一串编码后的byte。

不是所有的编码输入输出都是0和1组成的。RS code也是类似的。

那这个输入输出之间的编码操作是怎么实现的呢?比如我要对一连串32位的整形数据进行编码,输出的编码可能有一位、三位、五位的二进制位,怎么把这些二进制位编码结果组合成byte字节呢?
5楼2015-04-21 17:00:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ll550

木虫 (职业作家)

引用回帖:
5楼: Originally posted by 无知飞鱼 at 2015-04-21 17:00:24
那这个输入输出之间的编码操作是怎么实现的呢?比如我要对一连串32位的整形数据进行编码,输出的编码可能有一位、三位、五位的二进制位,怎么把这些二进制位编码结果组合成byte字节呢?...

比如一个byte 8bit 00000000 = 0,00000001 = 1,。。。。。。一次类推到255即可。输出的也是同样的byte。
livelong
6楼2015-04-21 17:24:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

无知飞鱼

银虫 (初入文坛)

引用回帖:
6楼: Originally posted by ll550 at 2015-04-21 17:24:51
比如一个byte 8bit 00000000 = 0,00000001 = 1,。。。。。。一次类推到255即可。输出的也是同样的byte。...

我是说怎么把不同长度的二进制位拼接成长的字节,比如:a,b,c对应的编码分别为:00,010,011,那么abc对应的编码就是00010011,这个结果应该怎么得到?同样我们解码时应该是对二进制位进行一位一位的判断,然后得到译码结果吧。这个应该可以通过位操作来实现,可是感觉会好麻烦。。。
7楼2015-04-21 20:03:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lcs199771

银虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
霍夫曼编码是无失真信源编码,编出的每一个码子是唯一可译的,在双方的码本里有一一对应,所以不要担心译码问题,接受的码子后,和接收端库里的码子对应查找就可以了,无所谓几进制!

[ 发自小木虫客户端 ]
业精于勤荒于嬉、行成于思而毁于随
8楼2015-04-21 22:06:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ll550

木虫 (职业作家)

【答案】应助回帖

引用回帖:
7楼: Originally posted by 无知飞鱼 at 2015-04-21 20:03:24
我是说怎么把不同长度的二进制位拼接成长的字节,比如:a,b,c对应的编码分别为:00,010,011,那么abc对应的编码就是00010011,这个结果应该怎么得到?同样我们解码时应该是对二进制位进行一位一位的判断,然后得到 ...

有个码本查询就得到了

[ 发自小木虫客户端 ]
livelong
9楼2015-04-21 22:11:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

无知飞鱼

银虫 (初入文坛)

引用回帖:
9楼: Originally posted by ll550 at 2015-04-21 22:11:45
有个码本查询就得到了
...

我是说怎么将那些不定长的二进制位拼接?查询只能得到单个字符的编码,怎么得到一连串字符串的编码?
10楼2015-04-22 08:22:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 无知飞鱼 的主题更新
信息提示
请填处理意见