社区
数据结构与算法
帖子详情
如何存储二进制文件
_Wanghui_
2005-04-22 08:22:55
我在做一道数据结构的作业,压缩文本文件
读取文件中的字符,转换为赫夫曼编码,然后应该是按位存储
(比如a是00,b是01,c是10,d是11...)
可是我不知道怎么存储这些编码
请高手详细指点!
...全文
246
5
打赏
收藏
如何存储二进制文件
我在做一道数据结构的作业,压缩文本文件 读取文件中的字符,转换为赫夫曼编码,然后应该是按位存储 (比如a是00,b是01,c是10,d是11...) 可是我不知道怎么存储这些编码 请高手详细指点!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhang_jiang
2005-04-25
打赏
举报
回复
byte在内存中的表示:
byte:
7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+
| | | | | | | | |
+-+-+-+-+-+-+-+-+
字符串为: "abcda"
byte |= mask[c[i] - 'a']<<count; // 将byte的0,1位赋值为 0, 0
7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+
| | | | | | |0|0|
+-+-+-+-+-+-+-+-+
count +=masklen[c[i]-'a']; // count由0变为2, 指向byte的2位
...
7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+
|1|1|1|0|0|1|0|0|
+-+-+-+-+-+-+-+-+
"abcd"的编码赋值给byte后,此时count=8
将byte存到文件中去, outputbyte();
清byte为0, 下个字符为'a'
...
============================================
还有个情况要考虑,
7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+
| |1|1|0|0|1|0|0|
+-+-+-+-+-+-+-+-+
count = 7, 指向byte的7位, 若此时下个字符为'a'
先将'a'的编码的第一位赋值给byte的7位
byte |= (mask[c[i]-'a']|(1<<(8 - count)-1))<<count;
保存完byte后, 将'a'编码的2位以后赋值给byte的0,1,...位
tmp = mask[c[i]-'a']>>(8-count);
byte=0;
byte|= tmp<<count;
count = masklen[c[i]-'a']+count-8;
_Wanghui_
2005-04-25
打赏
举报
回复
老实说看不明白...
zhang_jiang
2005-04-24
打赏
举报
回复
修改了一下:
int count=0;
char byte=0;
char mask[N]={0, 1, 2, 3, ...}; // 00, 01, 10, 11, ...
int masklen[N]={2,2,2,2, ...}; // length of mask
int tmp;
for( ...; ...; ...)
{
if(count + masklen[c[i] - 'a'] >= 8) // c -- input character
{
byte |= (mask[c[i]-'a']|(1<<(8 - count)-1))<<count;
outputbyte(); // save byte to some file
tmp = mask[c[i]-'a']>>(8-count);
byte=0;
byte|= tmp<<count;
count = masklen[c[i]-'a']+count-8;
}
else
{
byte |= mask[c[i] - 'a']<<count;
count += masklen[c[i]-'a'];
}
}
_Wanghui_
2005-04-23
打赏
举报
回复
我看看
zhang_jiang
2005-04-23
打赏
举报
回复
int count=0;
char byte=0;
char mask[N]={0, 1, 2, 3, ...}; // 00, 01, 10, 11, ...
int masklen[N]={2,2,2,2,...} // length of mask
int tmp;
for(;...;)
{
if(count + masklen[c - 'a'] >= 7) // c -- input character
{
byte |= (mask[c-'a']|(1<<(8 - count)-1))<<count;
outputbyte(); // save byte to some file
tmp = mask[c-'a']>>(8-count);
byte=0;
byte|= tmp<<count;
}
else
byte |= mask[c - 'a']<<count;
}
c#读取
二进制
文件
c#读取
二进制
文件
c#读取
二进制
文件
c#读取
二进制
文件
c#读取
二进制
文件
c#读取
二进制
文件
c#读取
二进制
文件
c#读取
二进制
文件
Binary Viewer
二进制
文件
读取软件
Binary Viewer
二进制
文件
读取软件,可读取
二进制
的语音数据,图像数据,从而分析音频或者图像
存储
的
二进制
信息
基于Linux系统的minio分布式对象
存储
二进制
文件
包及启动脚本
MinIO 是一款基于Go语言发开的高性能、分布式的对象
存储
系统。客户端支持Java,Net,Python,Javacript, Golang语言。
文本
文件
转换成
二进制
文件
把纯文本
文件
转化成
二进制
文件
存储
到一个.c
文件
里 .c
文件
的数组里是
二进制
的内容
NC_matlab_matlab
二进制
_
二进制
文件
_
二进制
文件
读写matlab_
用来读取
二进制
文件
和写入
二进制
文件
的函数
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章