C语言读写二进制流

来源:互联网 发布:淘宝美工和运营的关系 编辑:程序博客网 时间:2024/06/01 11:13

学习赫夫曼编码,对于如何把二进制流存入二进制文件或如何从二进制文件读出二进制流进行了研究, 总结网上诸多大侠的片言只语, 实现了这一功能。声明:本人只是在学习C语言,不能跟专业人士相提并论。
原理是用一组掩码与要读出或写入的字符进行位运算,逐个写入或输出二进制码流。

源码:

#include <stdio.h>#define FILE_PATH "d:\\1.dat"char *bin="001101110110001000010000111100";unsigned char mask[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; FILE *fp;int BinRead(){    unsigned char get[255];    int  pos,p = 0;    unsigned char ch;    fopen_s(&fp,FILE_PATH, "rb");     ch = fgetc(fp);    while(!feof(fp)){        for(pos=7;pos>=0;pos--){            if(ch & mask[pos]) get[p]='1';            else get[p]='0';            p++;        }        ch = fgetc(fp);    }    get[p]='\0';    printf("\n%s\n",get);    fclose(fp);    return  0;}int BinWrite(){    fopen_s(&fp,FILE_PATH, "wb");     int  pos = 7;    unsigned char ch,put = 0x00;    while((ch=bin[0])!='\0'){        if (ch=='1')    put =  put  | mask[pos];        bin ++;        pos --;        if(pos==-1) {            fputc(put,fp);            pos = 7;            put = 0x00;        }    }    if (pos<7) fputc(put,fp);    fclose(fp);    return  0;}int main(){    BinWrite();    BinRead();    getchar();    return 0;}
1 0
原创粉丝点击