首页 > 学院 > 开发设计 > 正文

一种从数据流中按位 读取数据的方法。

2019-11-08 18:49:51
字体:
来源:转载
供稿:网友
typedef struct{    const unsigned char *pMemory;     unsigned char mask;    unsigned char rack;} BIT_STRING_T;static BIT_STRING_T mBitString;

定义一个结构体来存储数据状态。

//================================================================void SetBitString(const unsigned char pMemory[])    // 设置初始状态, 将数据流赋值给指针{	mBitString.pMemory = &pMemory[0];	mBitString.mask = 0x80;	mBitString.rack = 0x00;}//================================================================unsigned long ReadBitsFromString(int numBitsToRead)     // 按位读取数据{	unsigned long retValue = 0;	if (numBitsToRead <= MAX_BITS_TO_READ)	{		while (numBitsToRead > 0)		{			if (mBitString.mask == 0x80)			{				mBitString.rack = mBitString.pMemory[0];			}			if ((mBitString.rack & mBitString.mask) > 0)			{				retValue <<= 1;				retValue  |= (unsigned long) 1;			}			else			{				retValue <<= 1;			}			mBitString.mask >>= 1;			if (mBitString.mask == 0)			{				mBitString.mask = 0x80;				mBitString.pMemory++;			}			numBitsToRead--;		}	}	return (retValue);}//================================================================void SkipBitsFromString(int numBitsToSkip)    // 在数据流中跳过指定位{	while (numBitsToSkip > 0)	{		if (mBitString.mask == 0x80)		{			mBitString.rack = mBitString.pMemory[0];		}		mBitString.mask >>= 1;		if (mBitString.mask == 0)		{			mBitString.mask = 0x80;			mBitString.pMemory++;		}		numBitsToSkip--;	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表