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

📄 bitwise.c

📁 一个播放器 使用了evc 大家可以参考下 哦
💻 C
字号:
/******************************************************************** *                                                                  * * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   * *                                                                  * * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       * *                                                                  * * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    * * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  * *                                                                  * ********************************************************************  function: packing variable sized words into an octet stream ********************************************************************//* We're 'LSb' endian; if we write a word but read individual bits,   then we'll read the lsb first */#include <string.h>#include <stdlib.h>#include "ogg.h"#define BUFFER_INCREMENT 256static unsigned long mask[]={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 };
void* _calloc(unsigned int x,unsigned int y)
{
	void* ptr=_ogg_malloc((unsigned int)x*y);
	memset(ptr,0,x*y);
	return ptr;
}
void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){  memset(b,0,sizeof(*b));  b->buffer=b->ptr=buf;  b->storage=bytes;}/* Read in bits without advancing the bitptr; bits <= 32 */long oggpack_look(oggpack_buffer *b,int bits){  unsigned long ret;  unsigned long m= mask[bits]; //(((unsigned int)-1)>>(32-bits));  bits+=b->endbit;  if(b->endbyte+4>=b->storage){    /* not the main path */    if(b->endbyte*8+bits>b->storage*8)return(-1);  }    ret=b->ptr[0]>>b->endbit;  if(bits>8){    ret|=b->ptr[1]<<(8-b->endbit);      if(bits>16){      ret|=b->ptr[2]<<(16-b->endbit);        if(bits>24){	ret|=b->ptr[3]<<(24-b->endbit);  	if(bits>32 && b->endbit)	  ret|=b->ptr[4]<<(32-b->endbit);      }    }  }  return(m&ret);}void oggpack_adv(oggpack_buffer *b,int bits){  bits+=b->endbit;  b->ptr+=bits/8;  b->endbyte+=bits/8;  b->endbit=bits&7;}/* bits <= 32 */long oggpack_read(oggpack_buffer *b,int bits){  unsigned long ret;  unsigned long m= mask[bits];//(((unsigned int)-1)>>(32-bits));  bits+=b->endbit;  if(b->endbyte+4>=b->storage){    /* not the main path */    ret=-1UL;    if(b->endbyte*8+bits>b->storage*8)goto overflow;  }    ret=b->ptr[0]>>b->endbit;  if(bits>8){    ret|=b->ptr[1]<<(8-b->endbit);      if(bits>16){      ret|=b->ptr[2]<<(16-b->endbit);        if(bits>24){	ret|=b->ptr[3]<<(24-b->endbit);  	if(bits>32 && b->endbit){	  ret|=b->ptr[4]<<(32-b->endbit);	}      }    }  }  ret&=m;   overflow:  b->ptr+=bits/8;  b->endbyte+=bits/8;  b->endbit=bits&7;  return(ret);}#undef BUFFER_INCREMENT

⌨️ 快捷键说明

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