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

📄 bitstream.cpp

📁 huffman编解码程序vc源码
💻 CPP
字号:
#include "malloc.h"
#include "memory.h"
#include "string.h"
#include "bitstream.h"
#include "io.h"
#include "fcntl.h"
#include "stdio.h"
#include "iostream.h"

BITBUF* InitialBitBuf(int size)
{
	BITBUF* pB=(BITBUF*)malloc(sizeof(BITBUF));
	pB->bitcount=0;
	pB->bytecount=0;
	pB->m_bufsize=size;
	memset(pB->m_fn,0,256);
	pB->pBuf=(unsigned char*)malloc(size);
	return pB;
}
BITBUF* InitialBitBuf(int size,char* fname)
{
	BITBUF* pB=(BITBUF*)malloc(sizeof(BITBUF));
	pB->bitcount=0;
	pB->bytecount=0;
	pB->m_bufsize=size;
	strcpy(pB->m_fn,fname);
	pB->pBuf=(unsigned char*)malloc(size);
	return pB;
}
/*
将存储在缓冲区v中的bitcount个二进制位整体左移shiftcount位存入pB缓冲区

void LeftShift(unsigned char* v,unsigned char* pB,int shiftcount,int bitcount)
{
}

void SendBit(BITBUF* pBB,unsigned char *v,int bitcount)
{
	int bytes=bitcount/8;
	int remained=bitcount%8;
	unsigned char* pTb=(unsigned char*)malloc((bitcount/8)+2);
	LeftShift(v,pTb,pBB->bitcount,bitcount);
	if(bitcount>(7-pBB->bitcount+1))	//说明填充完当前字节后还有bitcount-(7-pBB->bitcount+1)个位需要置入后面的空间
	{
	}
	else
	{
	}
	free(pTb);
}
*/
void SendOneBit(BITBUF* pBB,unsigned char v)
{
	pBB->pBuf[pBB->bytecount]=(pBB->pBuf[pBB->bytecount] & (~(0x80>>(7-pBB->bitcount))))
		| ((v<<pBB->bitcount) & (0x80>>(7-pBB->bitcount)));
	pBB->bitcount++;
	if(pBB->bitcount==8)
	{
		pBB->bytecount++;
		pBB->bitcount=0;
	}
	if(pBB->bytecount==pBB->m_bufsize)
	{
		;
	}
}

unsigned long GetBit(BITBUF* pBB,int bitcount)
{
	return 0;
}
void WriteToFile(BITBUF* pBB)
{
	int fh;
	int tmp;
	if(pBB->m_fn[0]==0)
		return;
	fh=_open(pBB->m_fn,_O_BINARY|_O_RDWR);
	if(fh==-1)
	{
		cout<<"打开文件"<<pBB->m_fn<<"失败!!!\n";
		return;
	}
	_lseek(fh,256*sizeof(unsigned int),0);
	tmp=_write(fh,pBB->pBuf,pBB->bytecount);
	cout<<"\n写入字节数:"<<tmp;
	_close(fh);
}
void ReadFromFile(BITBUF* pBB)
{
	int fh;
	fh=_open(pBB->m_fn,_O_RDONLY|_O_BINARY);
	if(fh==-1)
		return;
	_lseek(fh,256*sizeof(unsigned int),SEEK_SET);
	_read(fh,pBB->pBuf,pBB->m_bufsize);
	_close(fh);
}

unsigned char GetBit(BITBUF* pBB)
{
	unsigned char m_tmp;
	m_tmp=(1<<pBB->bitcount) & (pBB->pBuf[pBB->bytecount]);
	pBB->bitcount++;
	if(pBB->bitcount==8)
	{
		pBB->bitcount=0;
		pBB->bytecount++;
	}
	if(m_tmp)
		return 1;
	else
		return 0;
}

⌨️ 快捷键说明

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