bits.h

来自「Flush解码源程序」· C头文件 代码 · 共 132 行

H
132
字号
#ifndef __BITS_H__#define __BITS_H__typedef struct bits_struct bits_t;struct bits_struct {	unsigned char *ptr;	int idx;	unsigned char *end;};static inline int bits_needbits(bits_t *b, int n_bytes){	if(b->ptr==NULL)return 1;	if(b->ptr + n_bytes > b->end)return 1;	return 0;}static inline int getbit(bits_t *b){	int r;	r = ((*b->ptr)>>(7-b->idx))&1;	b->idx++;	if(b->idx>=8){		b->ptr++;		b->idx = 0;	}	return r;}static inline unsigned int getbits(bits_t *b, int n){	unsigned long r = 0;	int i;	for(i=0;i<n;i++){		r <<=1;		r |= getbit(b);	}	return r;}static inline unsigned int peekbits(bits_t *b, int n){	bits_t tmp = *b;	return getbits(&tmp, n);}static inline int getsbits(bits_t *b, int n){	unsigned long r = 0;	int i;	if(n==0)return 0;	r = -getbit(b);	for(i=1;i<n;i++){		r <<=1;		r |= getbit(b);	}	return r;}static inline unsigned int peek_u8(bits_t *b){	return *b->ptr;}static inline unsigned int get_u8(bits_t *b){	return *b->ptr++;}static inline unsigned int get_u16(bits_t *b){	unsigned int r;	r = b->ptr[0] | (b->ptr[1]<<8);	b->ptr+=2;	return r;}static inline int get_s16(bits_t *b){	short r;	r = b->ptr[0] | (b->ptr[1]<<8);	b->ptr+=2;	return r;}static inline unsigned int get_be_u16(bits_t *b){	unsigned int r;	r = (b->ptr[0]<<8) | b->ptr[1];	b->ptr+=2;	return r;}static inline unsigned int get_u32(bits_t *b){	unsigned int r;	r = b->ptr[0] | (b->ptr[1]<<8) | (b->ptr[2]<<16) | (b->ptr[3]<<24);	b->ptr+=4;	return r;}static inline void syncbits(bits_t *b){	if(b->idx){		b->ptr++;		b->idx=0;	}}#endif

⌨️ 快捷键说明

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