[AVR单片机] 一个十六位分成两个八位

[复制链接]
 楼主| 恒宇 发表于 2010-8-27 09:52 | 显示全部楼层 |阅读模式
问下高手:c语言一个十六位分成两个八位怎么处理?
宇宙飞船 发表于 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位
sz_longyue 发表于 2010-9-3 17:11 | 显示全部楼层
int len16;
char a8,b8;

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

评论

这个方法 简单明了  发表于 2016-3-16 19:19
dajiang952 发表于 2010-10-6 17:05 | 显示全部楼层
b8 = (char)len16; 取低8位,高位被强制转换抛掉了
那个括号里的char 不要应该也可以吧?改成b8=len16&0x00ff;
ZRL700424 发表于 2010-10-9 16:40 | 显示全部楼层
b8 = (char)len16; 取低8位,高位被强制转换抛掉了
那个括号里的char 不要应该也可以吧?改成b8=len16&0x00ff;
dajiang952 发表于 2010-10-6 17:05


两种写法结果一样,没有区别
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

粉丝
快速回复 在线客服 返回列表 返回顶部