社区
C语言
帖子详情
c++二进制文件读写的疑惑
asas2002
2002-05-03 09:53:27
小弟最近在编写c++有关二进制文件读写的程序(vc6.0),但找了半天msdn也没发现什么二进制功能很全的函数和类库,请各位给小弟我指点一下有关二进制文件的读写的问题.
我主要是想实现写入二进制文件指定位数的值,和从二进制文件读出指定位数的值.例如,我想写入二进制数10000100010(共11位),我想把它写入二进制文件,一次写入14位,00010000100010(不足的位用0补),然后再从文件里读出写入的这个数(一次读出14位).
先谢大家了.
...全文
512
13
打赏
收藏
c++二进制文件读写的疑惑
小弟最近在编写c++有关二进制文件读写的程序(vc6.0),但找了半天msdn也没发现什么二进制功能很全的函数和类库,请各位给小弟我指点一下有关二进制文件的读写的问题. 我主要是想实现写入二进制文件指定位数的值,和从二进制文件读出指定位数的值.例如,我想写入二进制数10000100010(共11位),我想把它写入二进制文件,一次写入14位,00010000100010(不足的位用0补),然后再从文件里读出写入的这个数(一次读出14位). 先谢大家了.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wolaiye3
2002-05-06
打赏
举报
回复
我也想做文件压缩!
mjm_d
2002-05-05
打赏
举报
回复
fwrite
fread
richard_hu
2002-05-05
打赏
举报
回复
自己做一个struct来存你的数据,然后就可以实现BIT read & write
Leemaasn
2002-05-04
打赏
举报
回复
是啊,纯bit是没有的,都是拼凑的。。。。
blactte
2002-05-04
打赏
举报
回复
WORD wval;
假设你定义的11位二进制数保存在xxx中
wval=wval|xxx;
然后再把wval写入文件
Wind_LQ
2002-05-04
打赏
举报
回复
毕业设计的时候做HUFFMAN压缩时也用到这个,可能少几个头文件自己加吧。
另外这是2年前的代码比较幼稚,见笑了。
int Bit_Write(char *bit_stream)
{
static FILE *fp=NULL;
static char buf[100];
if (fp!=NULL && strlen(bit_stream)!=0)
{
/*Write BitStream to file*/
strcpy(&buf[strlen(buf)],bit_stream);
for(;strlen(buf)>=8;)
{
unsigned char byte;
int x;
for(x=0,byte=0;x<8;x++)
{
if (buf[x]!='0' && buf[x]!='1')
{
/*Bit Stream Error!*/
return 0;
}
byte=byte*2+(buf[x]-'0');
}
fwrite(&byte,1,1,fp);
strcpy(&buf[0],&buf[8]);
}
return 1;
}
if (fp!=NULL && strlen(bit_stream)==0)
{
/*Write the buffer and Close the file*/
if (strlen(buf)>0)
{
unsigned char byte;
int x;
for(;strlen(buf)<8;)
{
strcpy(&buf[strlen(buf)],"0");
}
for(x=0,byte=0;x<8;x++)
{
if (buf[x]!='0' && buf[x]!='1')
{
/*Bit Stream Error!*/
return 0;
}
byte=byte*2+(buf[x]-'0');
}
fwrite(&byte,1,1,fp);
}
fclose(fp);
fp=NULL;
return 1;
}
if (fp==NULL)
{
/*Open file*/
fp=fopen(bit_stream,"wb");
if (fp==NULL)
{
/*Couldn't open file*/
return 0;
}
buf[0]=0;
return 1;
}
return 0;
}
int Bit_Read(char *filename)
{
static FILE *fp;
static unsigned char buf;
static int times;
int bit;
if(fp!=NULL)
{
if (times==0)
{
fread(&buf,1,1,fp);
if (feof(fp))
{
/*End of the file*/
fclose(fp);
fp=NULL;
return -1;
}
times=8;
}
bit=buf/128;
buf%=128;
buf*=2;
times--;
return bit;
}
if(fp==NULL)
{
/*Open file*/
fp=fopen(filename,"rb");
if (fp==NULL)
{
/*Open file error*/
return 0;
}
times=0;
buf=0;
return 1;
}
return 1;
}
vcmfc
2002-05-04
打赏
举报
回复
怪事,自动提交???
继续:
要么将你的这些001001当作字符(io流的字符模式),要么处理成int,byte等类型,再write,后南read(binary).
vcmfc
2002-05-04
打赏
举报
回复
我的想法有偏见:
IO流中有个read与write可以处理binary,
canco
2002-05-03
打赏
举报
回复
从你的需求来看,你好象不是要实现二进制文件读写,而是把整型转化为2进制按文本写进文件,这种实现只需用C++中的ofstream类,再加上bitset类库应该就可以实现了。
z_sky
2002-05-03
打赏
举报
回复
缓冲和拼凑字节,硬着头皮上吧,不过这对数据存储格式的理解有好处。
asas2002
2002-05-03
打赏
举报
回复
哎,我也想按byte来呀,可是我做的压缩算法是按bit来的......能省就省
z_sky
2002-05-03
打赏
举报
回复
文件不是按bit访问的,而是按byte,所谓的字节流,所以需要你做缓冲和拼凑字节。读出也是这样。或者你大方点用16bit(2byte)作存储单位。
asas2002
2002-05-03
打赏
举报
回复
能给点提示也好呀
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章