📄 dbitstream.cpp
字号:
#include "stdafx.h"
#include "Dbitstream.h"
#include "commonvar.h"
DBitStream::DBitStream(BYTE *CompressData)
{
BitPosition=7;
BYTEPosition=0;
InputBuffer=CompressData;
CurrentReadByte=InputBuffer[BYTEPosition++];
}
_inline int DBitStream::ReadOneBit(void)
{ int Value;
Value=CurrentReadByte&bit_set_mask[BitPosition--];
if (BitPosition<0)
{CurrentReadByte=InputBuffer[BYTEPosition++];
BitPosition=7;
}
if (Value)
return 1;
else return 0;
}
int DBitStream::ReadVarible(int BitCount)
{
register int Value,BitLeft;
int OldBitPosition,OldReadByte,OldBytePosition;
register BYTE AndByte;
OldBitPosition=BitPosition;
OldReadByte=CurrentReadByte;
OldBytePosition=BYTEPosition;
if (BitCount<=BitPosition)
{AndByte=(BYTE)(msk[BitCount]<<(BitPosition-BitCount+1));
Value=(CurrentReadByte&AndByte)>>(BitPosition-BitCount+1);
BitPosition-=BitCount;
}
else if (BitCount==(BitPosition+1))
{AndByte=(BYTE)(msk[BitCount]<<(BitPosition-BitCount+1));
Value=CurrentReadByte&AndByte;
BitPosition=7;
CurrentReadByte=InputBuffer[BYTEPosition++];
}
else
{Value=CurrentReadByte&msk[BitPosition+1];
BitLeft=BitCount-BitPosition-1;
Value<<=BitLeft;
BitPosition=7;
CurrentReadByte=InputBuffer[BYTEPosition++];
while (BitLeft>=8)
{BitLeft-=8;
Value|=(CurrentReadByte<<BitLeft);
CurrentReadByte=InputBuffer[BYTEPosition++];
}
if (BitLeft)
{AndByte=(BYTE)(msk[BitLeft]<<(8-BitLeft));
Value|=(CurrentReadByte&AndByte)>>(8-BitLeft);
BitPosition=7-BitLeft;
}
}
BitPosition=OldBitPosition;
CurrentReadByte=OldReadByte;
BYTEPosition=OldBytePosition;
return Value;
}
void DBitStream::FlushBits(int BitCount)
{
while (BitCount--)
{BitPosition--;
if (BitPosition<0)
{CurrentReadByte=InputBuffer[BYTEPosition++];
BitPosition=7;
}
}
}
int DBitStream::GetOneBit(void)
{
return ReadOneBit();
}
int DBitStream::GetVarible(int BitCount)
{
register int Value,BitLeft;
register BYTE AndByte;
if (BitCount<=BitPosition)
{AndByte=(BYTE)(msk[BitCount]<<(BitPosition-BitCount+1));
Value=(CurrentReadByte&AndByte)>>(BitPosition-BitCount+1);
BitPosition-=BitCount;
}
else if (BitCount==(BitPosition+1))
{AndByte=(BYTE)(msk[BitCount]<<(BitPosition-BitCount+1));
Value=CurrentReadByte&AndByte;
BitPosition=7;
CurrentReadByte=InputBuffer[BYTEPosition++];
}
else
{Value=CurrentReadByte&msk[BitPosition+1];
BitLeft=BitCount-BitPosition-1;
Value<<=BitLeft;
BitPosition=7;
CurrentReadByte=InputBuffer[BYTEPosition++];
while (BitLeft>=8)
{BitLeft-=8;
Value|=(CurrentReadByte<<BitLeft);
CurrentReadByte=InputBuffer[BYTEPosition++];
}
if (BitLeft)
{AndByte=(BYTE)(msk[BitLeft]<<(8-BitLeft));
Value|=(CurrentReadByte&AndByte)>>(8-BitLeft);
BitPosition=7-BitLeft;
}
}
return Value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -