让我来终结这个帖子吧
(1)联合体效率是比结构体高,但是联合体要注意大小端的问题 就像28楼和29楼说的。但是并不是所有人都能意识到这个大小端,所以不推荐使用联合体。只有在对效率有严格要求的情况下谨慎的使用。
(2)圈圈的方法
考虑到以后的可移植性,我一般这样写:
TempNum = Buffer[0];
TempNum*=256;
TempNum+=Buffer[1];
computer00 发表于 2009-10-15 17:21
就这个问题本身来说还是不错的,没有什么漏洞
(3)
这种方法TempNum = (((UINT16)Buffer[0]) << 8) | ((UINT16)Buffer[1]) ;
也是很好的 ,因为移位指令本身不用考虑大小端问题 比如说Intel80X86/Pentium体系(little-endian)的CPU和Motorola 68K体系(big-endian)中的执行结果是完全相同的。向最常见的keil 、MDK编译器也是如此。
(4)也可以考虑用微软提供的方法WORD MAKEWORD(
BYTE bLow,
BYTE bHigh
);
Parameters
bLow
Specifies the low-order byte of the new value.
bHigh
Specifies the high-order byte of the new value.
Return Value
The return value is a WORD value.
--------------
因为放置了两个byte ,已经很“齐”了,因此理论上所有编译器都会认为是占2个字节
(5)推荐一个微软的另一种做法给个参考#define MAKEWORD(a, b) ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xff)) | ((WORD)((BYTE)((DWORD_PTR)(b) & 0xff))) < < 8))
|