keil里面两个16进制数据合并成32位高16位被丢弃

[复制链接]
1040|4
手机看帖
扫描二维码
随时随地手机跟帖
林天择|  楼主 | 2018-1-30 23:57 | 显示全部楼层 |阅读模式
各位好,请教下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);
}

串口调试助手结果

串口调试助手结果

相关帖子

xurexi| | 2018-1-31 08:22 | 显示全部楼层
along = bu16 << 16 | cu16;
右边bu16 << 16后,是0000,再或后,是1010,还是int,再赋值给long,所以高16位是0000,低16位是1010
我指针不懂。

使用特权

评论回复
877049204| | 2018-1-31 09:04 | 显示全部楼层
用串口拆着发送8位不行吗

使用特权

评论回复
xuyaqi| | 2018-1-31 11:04 | 显示全部楼层
这句:along = bu16 << 16 | cu16;  改成:along =(ulong)bu16 << 16 | cu16; 试一下。

使用特权

评论回复
一周一天班| | 2018-1-31 13:52 | 显示全部楼层
移位操作要加括号,优先级非常低,你这16先或,再移位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝