各位好,请教下keil里面两个16进制数据合并成32位高16位被丢弃是什么问题呢?程序如下:用上面的合并方式,发到串口助手里面高16位被丢弃了,需要用下面的那种合并方式.想了很久也没找到原因,求帮忙分析下,万分感谢!void main(){ unsigned long along; unsigned int bu16; unsigned int cu16; bu16 = 0x1000; cu16 = 0x1010; Init_UART(); along = bu16 << 16 | cu16; UART1_Send(along >> 24); UART1_Send(along >> 16); UART1_Send(along >> 8); UART1_Send(along); ((unsigned char *)&along)[0] = bu16 >> 8; ((unsigned char *)&along)[1] = bu16 ; ((unsigned char *)&along)[2] = cu16 >> 8 ; ((unsigned char *)&along)[3] = cu16 ; UART1_Send(along >> 24); UART1_Send(along >> 16); UART1_Send(along >> 8); UART1_Send(along); while(1);}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
mdk不会出现楼主遇到的问题,我记忆里keil51也没有这样的问题,vs也没有这样的问题。
这个应该不是如何强制转换的问题,应该是运算次序的问题,如果都先强制转换为32位,那就没问题,但如果是先进行移位等运算,再强制转换为32位,那就会出错了。
在这里,赋值运算应该是最后进行的,所以强制转换应该也是在赋值一刻才进行的,这样就会出错,如果在等号右边加一个强制转换的格式,例如 = (u32)等,或许也可以解决这个问题
一周热门 更多>