c++二进制文件读写的疑惑

asas2002 2002-05-03 09:53:27
小弟最近在编写c++有关二进制文件读写的程序(vc6.0),但找了半天msdn也没发现什么二进制功能很全的函数和类库,请各位给小弟我指点一下有关二进制文件的读写的问题.
我主要是想实现写入二进制文件指定位数的值,和从二进制文件读出指定位数的值.例如,我想写入二进制数10000100010(共11位),我想把它写入二进制文件,一次写入14位,00010000100010(不足的位用0补),然后再从文件里读出写入的这个数(一次读出14位).

先谢大家了.
...全文
512 13 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
能给点提示也好呀

69,371

社区成员

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

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