📄 bitstrm.cpp
字号:
#include "bitstrm.h"// this class will increment Err if you proceed past the end of the bufferBitStream::BitStream (unsigned char *pBuffer, unsigned long Length, int *Err){ m_rdbfr = pBuffer; m_rdbfr_length = Length; m_nbits = 0; initbits (Err);}BitStream::~BitStream (){} void BitStream::initbits (int *Err){ m_incnt = 0; m_rdptr = m_rdbfr + m_rdbfr_length; m_rdmax = m_rdptr; m_bitcnt = 0; m_bfr = 0; m_rdptr = m_rdbfr; flushbits (0, Err);}// return next n bits (right adjusted) without advancingunsigned int BitStream::showbits (int n){ return m_bfr >> (32-n);}// advance by n bitsvoid BitStream::flushbits (int n, int *Err){ int incnt; m_nbits += n; if (n == 32) m_bfr = 0; else m_bfr <<= n; incnt = m_incnt -= n; if (incnt <= 24) { if (m_rdptr < m_rdbfr+(m_rdbfr_length-4)) { do { m_bfr |= *m_rdptr++ << (24 - incnt); incnt += 8; } while (incnt <= 24); } else { do { if (m_rdptr >= m_rdbfr+m_rdbfr_length) { *Err++; m_bfr |= 0 << (24 - incnt); } else m_bfr |= *m_rdptr++ << (24 - incnt); incnt += 8; } while (incnt <= 24); } m_incnt = incnt; }}void BitStream::flushbits32 (int *Err){ int incnt; m_nbits += 32; m_bfr = 0; incnt = m_incnt; incnt -= 32; while (incnt <= 24) { if (m_rdptr >= m_rdbfr+m_rdbfr_length) { *Err++; m_bfr |= 0 << (24 - incnt); } else m_bfr |= *m_rdptr++ << (24 - incnt); incnt += 8; } m_incnt = incnt;}// return next n bits (right adjusted)unsigned int BitStream::getbits (int n, int *Err){ unsigned int l; l = showbits (n); flushbits (n, Err); return l;}unsigned int BitStream::getbits32 (int *Err){ unsigned int l; l = showbits (32); flushbits32 (Err); return l;}void BitStream::align (int *Err){ int incnt; if (m_incnt != 32) { incnt = m_incnt % 8; flushbits (incnt, Err); }}long BitStream::getnbits (){ return m_nbits;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -