, , , , . , xor , 0, . . , 2 . 2 , . 17 , . ( , , )
bool checkData(char* data, int* offset)
{
static char firstMask[8] = { 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01 };
static char endMask[8] = { 0x80, 0xC0, 0xE0, 0x0F, 0xF8, 0xFC, 0xFE, 0xFF };
static char pattern[8][3] = { { 0xFF, 0xFF, 0x80 },
{ 0x8F, 0xFF, 0xC0 },
{ 0x3F, 0xFF, 0xE0 },
{ 0x1F, 0xFF, 0xF0 },
{ 0x0F, 0xFF, 0xF8 },
{ 0x07, 0xFF, 0xFC },
{ 0x03, 0xFF, 0xFE },
{ 0x01, 0xFF, 0xFF }};
int lcv;
int lcv2;
char value;
*offset = -1;
for ( lcv = 0; lcv < 8 ; lcv++ )
{
value = (firstMask[lcv] & *data) ^ pattern[lcv][0];
if ( 0 != value )
{
continue;
}
for ( lcv2 = 1; lcv2 < 2; lcv2++)
{
if ( 0 != (*(data+lcv2)^pattern[lcv][lcv2]))
{
break;
}
}
if ( 2 != lcv2)
{
continue;
}
value = (*(data + lcv2) & endMask[lcv]) ^ pattern[lcv][lcv2];
if ( 0 != value )
{
continue;
}
}
if ( lcv < 8 )
{
*offset = lcv ;
return true;
}
return false;
}
. , .
, , .
, 37 .