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--; }}
新闻热点
疑难解答