⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitio.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
字号:
#include <stdio.h>#include <stdlib.h>//#include "bitio.h"//#include "errhand.h"        typedef struct tag_bit_file{	FILE *file;	unsigned char mask;	int rack;	int pacifier_counter;  	char *buffer;  	unsigned int ptr;}BIT_FILE;BIT_FILE		*OpenInputBitFile(char *filename);BIT_FILE		*OpenOutputBitFile(char *filename);void			OutputBit(BIT_FILE *bit_file,int bit);void			OutputBits(BIT_FILE *bit_file,unsigned long code,int count);int				InputBit(BIT_FILE *bit_file);unsigned long	InputBits(BIT_FILE *bit_file,int count);void			CloseInputBitFile(BIT_FILE *bit_file);void			CloseOutputBitFile(BIT_FILE *bit_file);void			FilePrintBinary(FILE *file,unsigned int code,int bits);void fatal_error(char *fmt);        #define		PACIFIER_COUNT	2047#define   	BUFFER_SIZE 1024*2void fatal_error(char *fmt){}BIT_FILE *OpenOutputBitFile(char *name){	BIT_FILE *bit_file;	bit_file=(BIT_FILE *)calloc(1,sizeof(BIT_FILE));	if(bit_file ==NULL)		return (bit_file);	bit_file->file =fopen(name,"wb");	bit_file->rack =0;	bit_file->mask =0x80;	bit_file->pacifier_counter =0;  	bit_file->buffer = calloc(1,BUFFER_SIZE);  	bit_file->ptr =0;	return (bit_file);}BIT_FILE *OpenInputBitFile(char *name){	BIT_FILE *bit_file;	bit_file=(BIT_FILE *)calloc(1,sizeof(BIT_FILE));	if(bit_file ==NULL)		return (bit_file);	bit_file->file =fopen(name,"rb");	bit_file->rack =0;	bit_file->mask =0x80;	bit_file->pacifier_counter =0;	return (bit_file);}void CloseOutputBitFile(BIT_FILE *bit_file){  if(bit_file->ptr>0)  {    if(fwrite((void *)&bit_file->buffer[0],sizeof(char),bit_file->ptr,        bit_file->file)!=bit_file->ptr)      fatal_error("Fatal error in write CloseBitFile!\n");    bit_file->ptr=0;  }	if(bit_file->mask !=0x80)		if(putc(bit_file->rack,bit_file->file) !=bit_file->rack)			fatal_error("Fatal error in CloseBitFile!\n");	fclose(bit_file->file);  if(bit_file->buffer!=NULL)    free(bit_file->buffer);	free((char *)bit_file);}void CloseInputBitFile(BIT_FILE *bit_file){	fclose(bit_file->file);	free((char *)bit_file);}void OutPutBit(BIT_FILE *bit_file,int bit){	if(bit)		bit_file->rack |=bit_file->mask;	bit_file->mask >>=1;	if(bit_file->mask==0)	{    //if(putc(bit_file->rack,bit_file->file)!=bit_file->rack)    //  fatal_error("Fatal error in OutputBit!\n");    //else    //  if((bit_file->pacifier_counter++&PACIFIER_COUNT )==0)    //    putc('.',stdout);    if(bit_file->ptr<BUFFER_SIZE)    {      bit_file->buffer[bit_file->ptr]=bit_file->rack;      bit_file->ptr++;    }    if(bit_file->ptr == BUFFER_SIZE)    {      if(fwrite((void *)&bit_file->buffer[0],sizeof(char),bit_file->ptr,          bit_file->file)!=bit_file->ptr)        fatal_error("Fatal error in write CloseBitFile!\n");      bit_file->ptr=0;    }		bit_file->rack =0;		bit_file->mask =0x80;	}}void OutputBits(BIT_FILE *bit_file,unsigned long code,int count){	unsigned long mask;	mask =1L << (count -1);	while(mask!=0)	{		if( mask & code)			bit_file->rack |=bit_file->mask;		bit_file->mask >>=1;		if(bit_file->mask ==0)		{     // if(putc(bit_file->rack,bit_file->file )!=bit_file->rack)     //   fatal_error("Fatal error in OutputBits!\n");     // else if ((bit_file->pacifier_counter++&PACIFIER_COUNT)==0)     //   putc('.',stdout);      if(bit_file->ptr<BUFFER_SIZE)      {        bit_file->buffer[bit_file->ptr]=bit_file->rack;        bit_file->ptr++;      }      if(bit_file->ptr ==BUFFER_SIZE)      {        if(fwrite((void *)&bit_file->buffer[0],sizeof(char),bit_file->ptr,            bit_file->file)!=bit_file->ptr)        {          fatal_error("Fatal error in write OutputBits");        }        bit_file->ptr=0;      }			bit_file->rack=0;			bit_file->mask=0x80;		}		mask >>=1;	}}int InputBit(BIT_FILE *bit_file){	int value;	if(bit_file->mask == 0x80)	{		bit_file->rack =getc(bit_file->file);		if(bit_file->rack ==EOF)			fatal_error("Fatal error in InputBit!\n");		//if((bit_file->pacifier_counter++&PACIFIER_COUNT )==0)		//	putc('.',stdout);	}	value=bit_file->rack &bit_file->mask;	bit_file->mask >>=1;	if(bit_file->mask==0)		bit_file->mask =0x80;	return (value ? 1:0);}unsigned long InputBits(BIT_FILE *bit_file,int bit_count){	unsigned long mask;	unsigned long return_value;	mask =1L <<(bit_count -1);	return_value =0;	while(mask !=0)	{		if(bit_file->mask ==0x80)		{			bit_file->rack =getc(bit_file->file);			if(bit_file->rack==EOF)				fatal_error("Fatal error in InputBit!\n");			//if((bit_file->pacifier_counter++ &PACIFIER_COUNT )==0)			//	putc('.',stdout);		}		if(bit_file->rack&bit_file->mask)			return_value|=mask;		mask>>=1;		bit_file->mask>>=1;		if(bit_file->mask ==0)			bit_file->mask =0x80;	}	return (return_value);}void FilePrintBinary(FILE *file,unsigned int code,int bits){	unsigned int mask;	mask =1<<(bits-1);	while(mask!=0)	{		if(code&mask)			fputc('1',file);		else			fputc('0',file);		mask >>=1;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -