6906的笔记 https://passport2.21ic.com/?533342 [收藏] [复制] [RSS]

日志

两个unsigned char 变成一个unsigned intint

已有 773 次阅读2010-6-13 14:09 |系统分类:单片机

学会使用联合。
也可以用指针进行强制转换后引用,不过不直观,很容易。


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);


还可以这样:
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宏的实现方法。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)