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

📄 bitio.c

📁 huffman coding and decoding adaptive huffman coding and decoding it is a assignment from my cours
💻 C
字号:
/************************** Start of BITIO.C ************************* * * This utility file contains all of the routines needed to impement * bit oriented routines under either ANSI or K&R C.  It needs to be * linked with every program used in the entire book. * */#include <stdio.h>#include <stdlib.h>#include "bitio.h"#include "errhand.h"#define PACIFIER_COUNT 2047BIT_FILE *OpenOutputBitFile( name )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;    return( bit_file );}BIT_FILE *OpenInputBitFile( name )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 *bit_file;{    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 );    free( (char *) bit_file );}void CloseInputBitFile( bit_file )BIT_FILE *bit_file;{    fclose( bit_file->file );    free( (char *) bit_file );}void OutputBit( bit_file, bit )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 );	bit_file->rack = 0;	bit_file->mask = 0x80;    }}void OutputBits( bit_file, code, count )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 OutputBit!\n" );        else if ( ( bit_file->pacifier_counter++ & PACIFIER_COUNT ) == 0 )		putc( '.', stdout );	    bit_file->rack = 0;            bit_file->mask = 0x80;        }        mask >>= 1;    }}int InputBit( bit_file )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_count )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, code, bits )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;    }}/*************************** End of BITIO.C **************************/

⌨️ 快捷键说明

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