标题: 两个char数据合并为一个int数,在1602上显示结果和直接赋值给int,在1602屏上显示错误 [打印本页]

作者: wis98    时间: 2019-7-20 08:09
标题: 两个char数据合并为一个int数,在1602上显示结果和直接赋值给int,在1602屏上显示错误
本帖最后由 wis98 于 2019-7-20 08:16 编辑

我将一个int变量直接赋值并在1602上显示正常,而将两个char数据合并为一个int数值时,在1602屏上却显示出3106,不知错在那,百度了好多左移方法试验,结果一样。

下图是正常时的截图,直接赋值时显示正常数据

int a=1234;





下面是当前合并赋值方法(百度并用过多种合并方法显示结果一样)



左移用过很多不同方法,显示结果一样出现错误
int a;
char b=12;
char c=34;
a|=b<<8;
a|=c;







作者: znz43a    时间: 2019-7-20 09:58
本帖最后由 znz43a 于 2019-7-20 11:03 编辑

显示的10进制数1234,在单片机中都是以2进制存储的,16进制是04D2H。
而b=12中,10进制数 12 在 b中是存储为 0CH
   c=34中,10进制数 34 在 b中是存储为 22H
所以  b移位8位放入高8位,c放低8位的结果是 0C22H,转换成10进制就是 3106
所以不能用移位,要用 bX100+c 计算
作者: 佛云    时间: 2019-7-20 10:39
不能这样移位,这是对应16进制的合并
0x0c(12)*256+0x22(34)=0x0c22(3106)

而i10进制合并是这样的
12*100+34=1234

------------------------
a=b*100+c
作者: xianfajushi    时间: 2019-7-20 11:56
        unsigned int a;
        unsigned char b=12;
        a=a+b*100;
作者: wis98    时间: 2019-7-20 12:31
谢谢,我回头再试试看
作者: wis98    时间: 2019-7-20 12:32
znz43a 发表于 2019-7-20 09:58
显示的10进制数1234,在单片机中都是以2进制存储的,16进制是04D2H。
而b=12中,10进制数 12 在 b中是存储 ...

谢谢大师指点俺




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1