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

📄 bitio.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
字号:
#include <windows.h>#include <stdio.h>#include <stdlib.h>typedef struct tag_bit_file{	FILE *file;	unsigned char mask;	char rack;	short pacifier_counter;	char *buffer;	int len,ylen;	unsigned short ptr;}BIT_FILE;BIT_FILE *OpenInputBitFile(char *filename);BIT_FILE *OpenOutputBitFile(char *filename);void OutputBit(BIT_FILE *bit_file,short bit);void OutputBits(BIT_FILE *bit_file,unsigned int code,short count);short InputBit(BIT_FILE *bit_file);unsigned int InputBits(BIT_FILE *bit_file,short count);void CloseInputBitFile(BIT_FILE *bit_file);void CloseOutputBitFile(BIT_FILE *bit_file);void FilePrintBinary(FILE *file,unsigned short code,short bits);BOOL ErrMsg(HWND hWnd, LPSTR msg);void fatal_error(char *fmt);#define		PACIFIER_COUNT	2047#define   	BUFFER_SIZE 1024*2void fatal_error(char *fmt){	ErrMsg(NULL,fmt);}BIT_FILE *OpenOutputBitFile(char *name){	BIT_FILE *bit_file;	bit_file=GlobalLock(GlobalAlloc(GHND,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 = GlobalLock(GlobalAlloc(GHND,BUFFER_SIZE));	bit_file->ptr =0;	return (bit_file);}BIT_FILE *OpenInputBitFile(char *name){	BIT_FILE *bit_file;	bit_file=GlobalLock(GlobalAlloc(GHND,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);}BIT_FILE *OpenInputMemFile(char *name,int len){	BIT_FILE *bit_file;	bit_file=GlobalLock(GlobalAlloc(GHND,sizeof(BIT_FILE)));	if(bit_file ==NULL)		return (bit_file);	bit_file->file =NULL;	bit_file->rack =0;	bit_file->mask =0x80;	bit_file->pacifier_counter =0;	bit_file->buffer =name;	bit_file->len =len;	bit_file->ylen =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)	  GlobalFree(GlobalHandle(bit_file->buffer));  GlobalFree(GlobalHandle(bit_file));}void CloseInputBitFile(BIT_FILE *bit_file){	fclose(bit_file->file);	GlobalFree(GlobalHandle(bit_file));}void CloseInputMenFile(BIT_FILE *bit_file){	GlobalFree(GlobalHandle(bit_file));}void OutPutBit(BIT_FILE *bit_file,short bit){	if(bit)		bit_file->rack |=bit_file->mask;	bit_file->mask >>=1;	if(bit_file->mask==0)	{		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 int code,short count){	unsigned int mask;	mask =1 << (count -1);	while(mask!=0)	{		if( mask & code)			bit_file->rack |=bit_file->mask;		bit_file->mask >>=1;		if(bit_file->mask ==0)		{		      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;	}}short InputMenBit(BIT_FILE *bit_file){	short value;	if(bit_file->mask == 0x80)	{		bit_file->rack =bit_file->buffer[bit_file->ylen++];	//getc(bit_file->file);		if(bit_file->rack ==EOF)			fatal_error("Fatal error in InputBit!\n");	}	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 int InputBits(BIT_FILE *bit_file,short bit_count){	unsigned int mask;	unsigned int return_value;	mask =1 <<(bit_count -1);	return_value =0;	while(mask !=0)	{		if(bit_file->mask ==0x80)		{			bit_file->rack =bit_file->buffer[bit_file->ylen++]; //getc(bit_file->file);			if(bit_file->rack==EOF)				fatal_error("Fatal error in InputBit!\n");		}		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 short code,short bits){	unsigned short 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 + -