压缩算法的实现,如何把编码后的二进制合并。

last_escape 2003-06-09 11:52:57
我做的是一个用huffman编码的压缩程序,编码已经编好了。但如何把二进制合并
让他们少占空间呢?比如编码 A: 110 B: 010 C: 101

我用哪种类型的变量储存编码?又怎么把他们合并后减少空间呢?
或者只要写进文件时合并也行?
...全文
76 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
boyfling 2003-06-14
  • 打赏
  • 举报
回复
如果是:
A: 110
B: 010
C: 101

你可以用一个16位的整型来表示5个字符编码,因为这样最多至浪费1位,可以设定为最高位。其实最高位还可以用来表示这16位是否已经装满5个字符,假若未装满,可置为0,反之为1。

具体用移位就可以实现了。
qhgary 2003-06-10
  • 打赏
  • 举报
回复
可是位数并不一定是8的整数倍,你如果补零凑上了,怎么还原?
xzygod 2003-06-10
  • 打赏
  • 举报
回复
掩码,按位屏蔽
last_escape 2003-06-10
  • 打赏
  • 举报
回复
有什么更好的办法么?
last_escape 2003-06-09
  • 打赏
  • 举报
回复
convert是什么函数?是标准库里的么?
luyiping 2003-06-09
  • 打赏
  • 举报
回复
可以把你们编好的程序发给我看看吗?
bill_lyp@163.com
谢谢了
kicool 2003-06-09
  • 打赏
  • 举报
回复
前几天我也做了这个多媒体作业,我是用字符串暂时存储0,1串,然后取8位,转换成char型的二进制,写入文件。
例如:
A B A C A
110 010 110 101 110
string temp = "110010110101110"
string write = "11001011"
char s = convert(write)
WriteToFile(s)
last_escape 2003-06-09
  • 打赏
  • 举报
回复
xzygod(xzygod) 你的程序能讲解一下么
static BYTE bytenew=0;
static WORD mask[16]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
这是干什么的?掩码么?
xzygod 2003-06-09
  • 打赏
  • 举报
回复
void JpegEnc::WriteBinStream(HUFFCODE huffCode)
{
CHAR codeLen = huffCode.length - 1; // 计算码长
WORD value = huffCode.code;

while (codeLen >= 0)
{
if (value & mask[codeLen])
{
bytenew |= mask[bitPos];
}
--codeLen;
--bitPos;
if (bitPos < 0)
{
CacheWriteByte(bytenew);
if (bytenew == 0xFF)
{

CacheWriteByte(0x00);
}
bitPos = 7;
bytenew = 0;
}
}
}

INT bitPos; //当前字节中Bit位置

static BYTE bytenew=0;
static WORD mask[16]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧