C语言读写二进制流
2015-10-26 21:09
399 查看
学习赫夫曼编码,对于如何把二进制流存入二进制文件或如何从二进制文件读出二进制流进行了研究, 总结网上诸多大侠的片言只语, 实现了这一功能。声明:本人只是在学习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; }
相关文章推荐
- Lua和C语言的交互详解
- mysql binlog二进制日志详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍