2007年4月2日星期一

review

review
pOut[optr++] = (char)bcal;
(char) 将int数据转为char字符.通过指针下标,传递给参数中的字符指针(间接访问),[optr++] 首次调用值为0,后递增,

6:27 PM | Add a comment | Permalink | Trackbacks (0) | Blog it | Delphi
September 25
位运算
int CodeMWCode( BYTE * pIn, int size, CHAR * pOut)
{
BYTE b1 = 0,bcal = 0;
BYTE bflag1 = 0,bflag2 = 0;
int i = 0;
int iptr = 0;
int optr = 0;
while( iptr < size )
{
b1 = pIn[iptr++] ^ 0xeb; //[11101011] 按位翻转
if( i < 2 ) //i为0、1时执行
{
bcal = b1;
bcal>>=2; //即[12345678]--->[00123456]=bcal
bflag1 =bcal;
bcal &= 0x3c; //0x3c(00111100) ,取bcal的3-6位,赋给bcal,即[00123456]--->[00123400]=bcal
b1 &=3; //3(00000011),取b1的1-2位,赋给b1,即[12345678]--->[00000078]=b1
bcal |= b1; //bcal=bcal合并b1,[00123400] | [00000078] = [00123478]=bcal
bcal += 0x3b;
pOut[optr++] = (char)bcal;

//(char) 将int数据转为char字符.通过指针下标,传递给参数中的字符指针(间接访问),[optr++] 首次调用值为0,后递增,


bflag2 = (bflag1 & 3 ) | (bflag2 << 2 ); //重复移位,取00123456中的56与bflag2(0)合并后,赋bflag2,等i=1,循环到达第2遍时,移位完成,00005656,
}
else //i为2时执行
{
bcal = b1;
bcal &= 0x3f;
bcal += 0x3b;
pOut[optr++] = (char)bcal;
b1>>= 2;
b1 &=0x30;
b1 |= bflag2;
b1 += 0x3b;
pOut[optr++] = (char)b1;
bflag2 = 0;
}
i ++; //i递增一次
i %=3; //i与3取模(求余),并重赋值。(0-2之间值)
}
pOut[optr] = 0;
if( i == 0 )
return optr;
pOut[optr++] = bflag2 + 0x3b;
pOut[optr] = 0;
// 打标记??
return optr;
}



写了一半的注释~事实还没完全明白第一行的反转是何用意。(也许仅仅是个翻转吧~)

累了~sleep~

没有评论: