typedef unsigned char U8;
typedef unsigned short U16;
//既约不可分多项式为0x01F5,返回 a*b
U8 multi(U8 a, U8 b)
{
U16 res1, tmp_a, tmp_b, tmp_turn, tmp_res, tmp_X;
U8 i;
tmp_a = a;
tmp_b = b;
tmp_X = 0xF5;
tmp_turn = tmp_a;//i=0时
if(tmp_b & 0x1)
tmp_res = tmp_turn;
else
tmp_res = 0;
for(i=1; i<8; i++)
{
tmp_turn = (U16)(tmp_turn<<1);
if(tmp_turn & 0xFF00)
{
tmp_turn = tmp_turn & 0xFF;
tmp_turn = tmp_turn ^ tmp_X;
}
if( ((U16)(tmp_b<<(15-i)))>>15 )
tmp_res = tmp_res ^ tmp_turn;
}
return (U8)tmp_res;
}