隨筆-65  評論-68  文章-4  trackbacks-0

          #include "iostream.h"
          #include "stdlib.h"
          #include "stdio.h"
          #include "io.h"

          class BinOutputer{
           private:
            FILE * outputFile;
            char buffer;
            int bit;

            char getBitPo(int i){
             if(i>7){
              cout<<"Inner bit error!"<<endl;
              exit(1);
             }
             int total=1;
             for(int j=0;j<i;j++)
              total*=2;
             return total;
            }

           public:
            BinOutputer(const char * fileName){
             outputFile=NULL;
             outputFile=fopen(fileName,"w+");
             if(outputFile==NULL){
              cout<<"Cannot open the output file."<<endl;
              exit(1);
             }
             bit=7;
             buffer=0;
            }

            FILE* getOutputFile(){
             return outputFile;
            }

            void outputABit(int i){
             cerr<<i;
             switch(i){
             case 1:
              buffer+=getBitPo(bit);
             case 0:
              bit--;
              if(bit==-1){
               bit=7;
               putc(buffer,outputFile);
               cerr<<"\tBuffer output:"<<(long)buffer<<endl;
               buffer=0;
              }
              break;
             default:
              cout<<"Bit output error!"<<endl;
              exit(1);
             }
            }

            void endOutput(){
             if(bit!=7){
              putc(buffer,outputFile);
              cerr<<"Buffer output:"<<(long)buffer<<endl;
             }
             fclose(outputFile);
            }

          };

          class BinInputer{
           private:
            FILE * inputFile;
            char buffer;
            int bit;

            char getBitPo(int i){
             if(i>7){
              cout<<"Inner bit error!"<<endl;
              exit(1);
             }
             int total=1;
             for(int j=0;j<i;j++)
              total*=2;
             return total;
            }

           public:
            BinInputer(const char * fileName){
             inputFile=NULL;
             inputFile=fopen(fileName,"r");
             if(inputFile==NULL){
              cout<<"Cannot open the output file."<<endl;
              exit(1);
             }
             bit=-1;
             buffer=0;
            }

            FILE* getInputFile(){
             return inputFile;
            }

            int inputABit(){
             if(bit==-1){
              bit=7;
              if((buffer=getc(inputFile))==EOF){ 
               return -1;
              }
             }
             int temp=getBitPo(bit);
             bit--;
             
             if((unsigned)buffer>=(unsigned)temp){
              buffer=(char)((unsigned)buffer-(unsigned)temp);
              //cerr<<'1';
              return 1;
             }
             else{
              //cerr<<'0';
              return 0;
             }

            }

            void endInput(){
             fclose(inputFile);
            }

          };

          posted on 2005-04-23 23:07 小爽 閱讀(694) 評論(0)  編輯  收藏 所屬分類: 我的經驗
          主站蜘蛛池模板: 云林县| 项城市| 紫阳县| 无极县| 五常市| 东乌珠穆沁旗| 玉树县| 德清县| 钟祥市| 手机| 南昌市| 娄底市| 泾源县| 玉门市| 丰宁| 墨玉县| 夹江县| 贵德县| 泸水县| 万盛区| 京山县| 晋江市| 龙井市| 卓尼县| 平武县| 张家口市| 唐山市| 德保县| 铁岭县| 文山县| 乌拉特前旗| 乌恰县| 宁城县| 桂东县| 布拖县| 泾阳县| 南涧| 鄂伦春自治旗| 常德市| 长岛县| 栖霞市|