隨筆-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)  編輯  收藏 所屬分類: 我的經(jīng)驗
          主站蜘蛛池模板: 广水市| 新源县| 双柏县| 云南省| 贡嘎县| 长子县| 麻阳| 开化县| 贞丰县| 屯留县| 平武县| 焉耆| 西盟| 关岭| 大埔区| 鞍山市| 建湖县| 萝北县| 广昌县| 长乐市| 涟水县| 治多县| 百色市| 崇州市| 瑞金市| 宽甸| 秦安县| 团风县| 靖宇县| 浦县| 长治县| 海阳市| 织金县| 克拉玛依市| 洛浦县| 衡阳县| 陆丰市| 炉霍县| 扶沟县| 永福县| 廊坊市|