cathy 发布于:周二, 06/01/2021 - 17:10 ,关键词:
在入门单片机时,想必大家都都会遇到一下这种情况:
unsigned char a = 0x12; unsigned char b = 0x34; unsigned int c = 0;
如何把两个8位数据合在一起变成16位数据呢?
一般情况下大家都会这样做,我最初是也是这么做的。
方法1 【使用移位指令】
int c = (a<<8)|b;
方法2 【使用指针】
unsigned char *cptr; cptr = (unsigned char*)(&d); cptr[0] = a; cptr[1] = b;
方法3 【强制指针类型转换】
*((unsigned char*)(&d)) = a; *((unsigned char*)(&d)+1) = b; 或 ((unsigned char*)(&d))[0] = a; ((unsigned char*)(&d))[1] = b;
以上这三种方法都是没有错误的,但在keil编译器中编译出的结果是不一样的。第三种方法编译出的代码会更简洁。
今天就交给大家第4种方法
方法4 【联合体】
typedef union{ unsigned int i; unsigned char c[2]; }u_int; unsigned char dH = 0x11, dL=0x22; unsigned int d; u_int ud; ud.c[0] = dH; ud.c[1] = dL; d = ud.i; 此时d = 0x1122;
这里就是利用了联合体union的特性来实现把两个8位数据合并成一个16位数据的方法。在C语言里操作指针最容易出现错误,所以在遇到这样类似的问题,大家不妨使用联合体的方式进行处理数据,既不容易出现错误,生成的代码又简洁。
来源:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。