二进制读写数据的问题

xubinlife 2015-10-29 09:22:58
比如要写入文本几个二进制数据分别是:00,01,1000,1001,1010,1011,110000……等,
现在想要连续存储,即保存为0001100010011010101111000……用fwrite分别写入好像不行,应该怎么写呢?
是每个数据分别写入还是将他们放在一起写入呢?

还有就是如何从0001100010011010101111000中读取各个数据呢?比如按3个bit读取一个数值,求帮忙
...全文
92 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-10-30
  • 打赏
  • 举报
回复
仅供参考:
//有一个二进制文件,要求每隔50bits,删除后面的12bits。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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<n;i++) {
        _itoa(buf[i],b8,2);
        sprintf(b88,"%032s",b8);
        sprintf(bit+i*8,"%s",b88+24);
    }

    j=0;
    for (i=0;i<n*8;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<bn;i++) obt[i]='0';
    obt[bn]=0;
    bn=bn/8;
    for (i=0;i<bn;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;
}

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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