c语言 怎么取二进制的每一位,c语言怎么对二进制文件的每一bit进行操作

这篇博客介绍如何使用C语言对二进制文件进行位操作,具体任务是每隔50位删除12位。程序通过读取二进制文件,逐字节处理,然后按照需求进行位移和删除操作,最终将处理后的数据写入新的二进制文件。该过程涉及到位运算和字符串处理技巧。
摘要由CSDN通过智能技术生成

c语言如何对二进制文件的每一bit进行操作?

例如,有一个二进制文件,要求每隔50bits,删除后面的12bits。

二进制文件

c语言

位操作

分享到:

------解决方案--------------------

调试通过的版本:

//有一个二进制文件,要求每隔50bits,删除后面的12bits。

#include 

#include 

#include 

FILE *fi,*fo;

char buf[31];

char obf[31];

int bn,n;

void filter() {//对buf中前n个字节中的位,每隔50bits,忽略12bits,结果放在obf中,且将bn设置为obf中的字节数。

char bit[249];

char obt[249];

char b8[33];

char b88[33];

int i,j;

char *e;

for (i=0;i

_itoa(buf[i],b8,2);

sprintf(b88,"%032s",b8);

sprintf(bit+i*8,"%s",b88+24);

}

j=0;

for (i=0;i

if (i%62<50) {

obt[j]=bit[i];

j++;

}

}

if (j%8) {

bn=(j/8+1)*8;

} else {

bn=j;

}

for (i=j;i

obt[bn]=0;

bn=bn/8;

for (i=0;i

strncpy(b8,obt+i*8,8);b8[8]=0;

obf[i]=(char)strtol(b8,&e,2);

}

}

int main() {

fi=fopen("in.bin","rb");

if (NULL==fi) {

printf("Can not open file in.bin!\n");

return 1;

}

fo=fopen("out.bin","wb");

if (NULL==fo) {

fclose(fi);

printf("Can not open file out.bin!\n");

return 2;

}

while (1) {

n=fread(buf,1,31,fi);

if (0==n) break;

filter();

fwrite(obf,1,bn,fo);

}

fclose(fo);

fclose(fi);

return 0;

}

------解决方案--------------------

一次读 50*8

写回 (50-12)×8

读缓冲50字节,写缓冲 50-12 =38字节,并清0

分别计算每个Bit所在字节和位每50Bits 或到写缓冲38Bits上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值