?? bitio.cpp
字號(hào):
// bitio.cpp
#include <stdio.h>
#include <stdlib.h>
#include "bitio.h"
#include "errhand.h"
#define PACIFIER_COUNT 2047
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;
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->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 )
{
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);
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 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 )
{
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 = 1L << (bits - 1);
while( mask != 0 )
{
if (code & mask)
fputc('1', file);
else
fputc('0', file);
mask >>= 1;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -