这是一个简单且未优化的解决方案,用于从字节数组中提取从 EXTRACT_OFFSET(此处 = 57)开始的 EXTRACT_COUNT 位(此处 = 75)。
当请求的bitIndex 指向bitArray[] 之外时,getBit() 返回 (-1),否则返回提取位的值。
#include <stdio.h>
int getBit(unsigned char bitArray[], int lenArray,int bitIndex)
{
int iBytePos = bitIndex >> 3;
int iByteBit = bitIndex % 8;
unsigned char uByteVal;
if (iBytePos > lenArray) {
return (-1);
}
uByteVal = bitArray[ iBytePos ];
if (iByteBit==0) printf("."); // to mark the 8bits border
if ((uByteVal & (0x80 >> iByteBit)) != 0) {
return (1);
}
return (0);
}
#define ARRAY_SIZE (18)
#define EXTRACT_OFFSET (57)
#define EXTRACT_COUNT (75)
int main()
{
unsigned char tabByte[ARRAY_SIZE] = {
0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xFF,
0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x00 };
int iVal,iCount;
iCount=0;
for(int i=0;i<EXTRACT_COUNT;i++)
{
iVal = getBit(tabByte,ARRAY_SIZE,i+EXTRACT_OFFSET);
if (iVal >= 0) {
iCount++;
printf("%1d",iVal);
}
}
printf("\niCount=%d\n",iCount);
return (0);
}