找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2364|回复: 5
收起左侧

两个char数据合并为一个int数,在1602上显示结果和直接赋值给int,在1602屏上显示错误

[复制链接]
ID:33544 发表于 2019-7-20 08:09 | 显示全部楼层 |阅读模式
本帖最后由 wis98 于 2019-7-20 08:16 编辑

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

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

int a=1234;

直接正常显示.jpg



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

左移赋值.jpg

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


左移错误显示.jpg



回复

使用道具 举报

ID:378182 发表于 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 计算
回复

使用道具 举报

ID:466578 发表于 2019-7-20 10:39 | 显示全部楼层
不能这样移位,这是对应16进制的合并
0x0c(12)*256+0x22(34)=0x0c22(3106)

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

------------------------
a=b*100+c
回复

使用道具 举报

ID:332444 发表于 2019-7-20 11:56 | 显示全部楼层
        unsigned int a;
        unsigned char b=12;
        a=a+b*100;
回复

使用道具 举报

ID:33544 发表于 2019-7-20 12:31 来自手机 | 显示全部楼层
谢谢,我回头再试试看
回复

使用道具 举报

ID:33544 发表于 2019-7-20 12:32 来自手机 | 显示全部楼层
znz43a 发表于 2019-7-20 09:58
显示的10进制数1234,在单片机中都是以2进制存储的,16进制是04D2H。
而b=12中,10进制数 12 在 b中是存储 ...

谢谢大师指点俺
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表