?? putbits.c
字號:
/* putbits.c, 比特級輸出*/
#include <stdio.h>
extern FILE *outfile;
static unsigned char outbfr;
static int outcnt;
static int bytecnt;
static int freespace; /* 緩存中的可用空間*/
static unsigned char *bufptr;
static unsigned char buffer[65536]; /* 大小為64KB緩存去 */
/* 初始化緩存*/
void initbits()
{
outcnt = 8;
bytecnt = 0;
freespace = sizeof(buffer);
bufptr = buffer;
}
void flushbits()
{
fwrite(buffer, 1, sizeof(buffer) - freespace, outfile);
bufptr = buffer;
freespace = sizeof(buffer);
}
/* 向輸出文件中寫入最右的n比特*/
void putbits(val,n)
int val;
int n;
{
int i;
unsigned int mask;
mask = 1 << (n-1);
for (i=0; i<n; i++)
{
outbfr <<= 1;
if (val & mask)
outbfr|= 1;
mask >>= 1; // select next bit
outcnt--;
if (outcnt==0) // 8 bit buffer full
{
*bufptr++ = outbfr;
if(--freespace <= 0)
flushbits();
outcnt = 8;
bytecnt++;
}
}
}
void alignbits()
{
if (outcnt!=8)
putbits(0,outcnt);
}
/* 返回產生的所有比特數*/
int bitcount()
{
return 8*bytecnt + (8-outcnt);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -