ここでは、EXTRACT_OFFSET
(ここでは57)で始まるビット(ここでは75)のバイト配列から抽出する簡単で最適化されていないソリューションです。
は、要求されたがbitArray[]
を指している場合は(-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);
}
ようこそスタックオーバーフロー!コード作成サービスではないので、これまでに何をしているのか、直面している問題とサンプルデータを伝える必要があります。 http://stackoverflow.com/help/how-to-ask –
ここでは、文字ポインタを介して特定のビットにアクセスすることについての質問です。それはあなたの質問に答えることはありませんが、それはあなたに進める方法のアイデアを与えるかもしれません。 http://stackoverflow.com/questions/7607224/how-do-you-reset-a-bit-value-in-a-string –