打印
[AVR单片机]

怎样把两个unsigned char 变成一个unsigned int

[复制链接]
7032|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
麻辣鸭脖子|  楼主 | 2010-6-12 23:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wuzhaolie| | 2010-6-12 23:14 | 只看该作者
高位的char在int+0上,低位的char在int+1上?
这句是什么意思?
楼主能说的清楚些吗?

使用特权

评论回复
板凳
麻辣鸭脖子|  楼主 | 2010-6-12 23:18 | 只看该作者
把两个char整到一个int里面,char的高低预先知道

使用特权

评论回复
地板
xwj| | 2010-6-12 23:20 | 只看该作者
学会使用联合。
也可以用指针进行强制转换后引用,不过不直观,很容易。

使用特权

评论回复
5
black.lu| | 2010-6-13 11:02 | 只看该作者
如LS所说
1、联合
union
{
unsigned int A;
unsigned char B[2];
}C;
2、指针
unsigned int A;
unsigned char B[2];
B[0]=*((unsigned char *)&A);
B[1]=*(((unsigned char *)&A)+1);

使用特权

评论回复
6
batsong| | 2010-6-13 14:06 | 只看该作者
5楼已经说完了,基本就这两种方法

使用特权

评论回复
7
mxh0506| | 2010-6-13 16:45 | 只看该作者
本帖最后由 mxh0506 于 2010-6-13 16:50 编辑

还可以这样:
uint16 get_int16(uint8 msb, uint8 lsb)
{
    uint16 result;
    result = (uint16)msb<<8 + lsb;
// 或者
    result = (uint16)msb*256 + lsb;
    return result;
}
不过这样得到的结果只在大端处理器中才能符合LZ的字节序要求(不影响使用,如果你的处理器是小端的,调用时只要互换msb和lsb的参数位置就可以了);这也正是它的优点:代码与特定硬件平台的字节序无关。可以参考MS VC++中的MAKEWORD宏的实现方法。

使用特权

评论回复
8
zhiyonghe| | 2010-6-13 22:50 | 只看该作者
mark

使用特权

评论回复
9
humy| | 2010-6-14 13:35 | 只看该作者
学习了,哈哈,真有用

使用特权

评论回复
10
麻辣鸭脖子|  楼主 | 2010-6-15 17:07 | 只看该作者
这么多牛人解答啊,太好了

使用特权

评论回复
11
ershisi| | 2010-6-15 17:41 | 只看该作者
联合什么的很陌生,平时用到的少

使用特权

评论回复
12
ccxlslr| | 2010-6-15 21:23 | 只看该作者
本帖最后由 ccxlslr 于 2010-6-15 21:24 编辑

别用联合这个C的死角,也别假设int型的高低排列!
不好移值

使用特权

评论回复
13
踢球老越位| | 2010-6-15 22:02 | 只看该作者
小心大小端结构问题哈。

使用特权

评论回复
14
jimoxinl| | 2010-6-16 22:21 | 只看该作者
什么是大小端结构问题呢?

使用特权

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

本版积分规则

0

主题

454

帖子

1

粉丝