📄 getbits.c
字号:
//*******************************************
//File Name: getbits.c
//Author: Anna
//Date:
//*******************************************
#include <stdio.h>
#include <stdlib.h>
extern unsigned char rdbfr[2051];
extern unsigned char *rdptr;
extern unsigned char inbfr[16];
extern int incnt;
extern int bitcnt;
extern FILE *infile;
extern char *infilename;
/* initialize buffer, call once before first getbits or showbits */
void initbits (unsigned char * stream, int length)
{
incnt = 0;
bitcnt = 0;
rdptr = rdbfr + 2048;
}
static unsigned int msk[33]=
{
0x00000000, 0x00000001, 0x00000003, 0x00000007,
0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
0xffffffff
};
static void fillbfr ()
{
int l;
inbfr[0] = inbfr[8];
inbfr[1] = inbfr[9];
inbfr[2] = inbfr[10];
inbfr[3] = inbfr[11];
if (rdptr >= rdbfr + 2048)
{
l = fread(rdbfr,1,2048,infile);
rdptr = rdbfr;
if (l < 2048)
{
if (l < 0)
l = 0;
while (l < 2048)
{
rdbfr[l++] = 0;
rdbfr[l++] = 0;
rdbfr[l++] = (1 << 7) | (31 << 2);
}
}
}
for(l=0;l<8;l++)
inbfr[l + 4] = rdptr[l];
rdptr+=8;
incnt+=64;
}
/*return next n bits (right adjusted) without advancing*/
unsigned int showbits (int n)
{
unsigned char *v;
unsigned int b;
int c;
if (incnt < n)
fillbfr ();
v = inbfr + ((96 - incnt) >> 3);
b = (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3];
c = ((incnt - 1) & 7) + 25;
return (b >> (c - n)) & msk[n];
}
/*advance by n bits*/
void flushbits (int n)
{
bitcnt += n;
incnt -= n;
if (incnt < 0)
fillbfr ();
}
unsigned int getbits (int n)
{
unsigned int l;
l = showbits (n);
flushbits (n);
return l;
}
/*int main()
{
// FILE *infile;
// char *infilename="garden176.avi";
int readbits;
incnt = 0;
bitcnt = 0;
rdptr = rdbfr + 2048;
if((infile=fopen(infilename,"rb"))==NULL)
{
printf("Input file %s not found\n",infilename);
exit(0);
}
readbits=getbits(32);
// readbits=showbits(32);
// flushbits(32);
// readbits=showbits(24);
printf("%d,",readbits);
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -