因为运算符 & 和 + ,今天把我折腾够呛。
1
2
3
4
|
case3 : /* XX 04 53 FF */ trans_crc = ((*ul_check_buffer)&0xff00) + ((*ul_check_buffer>>16)&0xff); trans_crc = ((((*ul_check_buffer)>>8)&0xff)<<8) + ((*ul_check_buffer>>16)&0xff); break ; |
就这两句代码。我本来的意思是,从中间提取出来 04 53,组成16位数据 0x5304, 结果怎么算得到的都是 0x0053,恰巧传输的时候,XX也是0,以至于我都当自己不会计算左移右移了。
因为我开始是这样子写的:
- case3 : /* XX 04 53 FF */
- trans_crc = (*ul_check_buffer)&0xff00 + (*ul_check_buffer>>16)&0xff;
- trans_crc = ((((*ul_check_buffer)>>8)&0xff)<<8) + ((*ul_check_buffer>>16)&0xff);
- break;
在 “+”两边我还特意空了两格,意思是两边相加,我压根没想到,按位与(&)的优先级竟然比加号(+)低!!!以后还是老老实实的加括号吧,不能想当然了。