打印
[AVR单片机]

一个十六位分成两个八位

[复制链接]
6825|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
恒宇|  楼主 | 2010-8-27 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
宇宙飞船| | 2010-8-27 11:09 | 只看该作者
两种方法,
1。 移位8位,再强制类型转换成8位。
2。 联合。

使用特权

评论回复
板凳
mxh0506| | 2010-8-27 12:33 | 只看该作者
还有指针。
INT16U sixteenBit;
INT8U *pEightBit;
INT8U byte1,byte2;
pEightBit = &sixteenBit;
byte1 = pEightBit[0];
byte2 = pEightBit[1];

使用特权

评论回复
地板
chrisbo| | 2010-9-3 10:13 | 只看该作者
本帖最后由 chrisbo 于 2010-9-3 10:17 编辑

定义一个共用体union,里面定义两个成员:一个ushort (16位)变量,一个uchar(8位)数组(两个长度),两个成员是共用内存的,你对ushort变量进行运算,uchar数组分别对应它的高8位和低8位

使用特权

评论回复
5
sz_longyue| | 2010-9-3 17:11 | 只看该作者
int len16;
char a8,b8;

a8 = len16>>8;   取高8位
b8 = (char)len16; 取低8位,高位被强制转换抛掉了

使用特权

评论回复
评论
SD10A 2016-3-16 19:19 回复TA
这个方法 简单明了 
6
dajiang952| | 2010-10-6 17:05 | 只看该作者
b8 = (char)len16; 取低8位,高位被强制转换抛掉了
那个括号里的char 不要应该也可以吧?改成b8=len16&0x00ff;

使用特权

评论回复
7
ZRL700424| | 2010-10-9 16:40 | 只看该作者
b8 = (char)len16; 取低8位,高位被强制转换抛掉了
那个括号里的char 不要应该也可以吧?改成b8=len16&0x00ff;
dajiang952 发表于 2010-10-6 17:05


两种写法结果一样,没有区别

使用特权

评论回复
8
xiyu_班超| | 2016-3-16 16:41 | 只看该作者
unsigned int length16;
unsigned char TH0,TL0;
TH0=(unsigned char)(length16 & 0xFF00); //取高8位
TL0=(unsigned char)(length16 & 0x00FF); //取低8位
以上这种方法也可以。

使用特权

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

本版积分规则

70

主题

123

帖子

0

粉丝