想想应该有好几种方法, 当然了, 这两个单字节变量的地址得考虑是连续的还是不连续的和考虑大小端序问题.
对于地址不连续的情况:
unsigned char H_Byte, L_Byte;
unsigned short Two_Bytes = (H_Byte << 8) + L_Byte; // 1
unsigned short Two_Bytes = (H_Byte * 0x100) + L_Byte; // 2
unsigned short Two_Bytes = H_Byte; // 3
Two_Bytes = (H_Byte << 8) + L_Byte; // 3
// 这三种方法里, 进行了两次隐式转换. 当然上面的 '+' 可以改为 '|'.
// 第一次: 字节型数据在进行算术和逻辑运算时要转换为 int / unsigned int 型.
// 第二次: 就是将 int 型数据赋给 short 型时要进行截断.
关于整形提升可以参考: http://blog.csdn.net/kissmonx/article/details/7974637
对于地址连续的情况:
第一种: 就是上面的那三个方法.
第二种:
union {
unsigned char byte[2];
unsigned short Two_Bytes;
}char2short; // 然后就可以直接引用 char2short.Two_Bytes 了.
第三种:
union {
short int Two_Bytes;
struct _DAT {
unsigned char L_Byte; // 这种方法没有使用联合体好
unsigned char H_Byte;
};
}char2short;
第四种:
unsigned short Two_Bytes = *((unsigned short *)(&L_Byte)); // 连续的地址, 这种方法最好, 但是难懂. 呵呵
===============================================================================================================================