bit移位相加的問題
int convert(unsigned char* c1,unsigned char* c2,unsigned char* c3,unsigned char* b1,unsigned char* b2);
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char ucs2[]={0x6c,0x49};
unsigned char utf8[3];
convert(utf8,utf8+1,utf8+2,ucs2,ucs2+1);
return 0;
}
int convert(unsigned char* c1,unsigned char* c2,unsigned char* c3,unsigned char* b1,unsigned char* b2)
{
unsigned char s1,s2,s3,s4;
s4=(*b2)&0x3f;
s3=(*b2)&0xc0;
s2=(*b1)&0x0f;
s1=(*b1)&0xf0;
*c3=0x80+s4;
unsigned char temp1=s3>>6;
unsigned char temp2=s2<<2;
unsigned char temp3=s1>>4;
*c2=0x80+s2<<2+s3>>6;
*c1=0xe0+s1>>4;
return 0;
}
把0x6c,0x49移位,得到的結果應該是E6 B1 89,但是為什麽得到的結果是14 08 89,
執行到*c2=0x80+s2<<2+s3>>6;的時候就出問題了,等號右邊的都對,但是為什麽c2加出來的結果是08 而不是B1呢