BYTE,WORD和DWORD宏定义

时间:2017-12-07 15:02:40

标签: c

我想了解一下,定义BYTEWORDDWORD宏的最佳方法是什么,这些是在question的答案中提到的。

#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))

假设,那是正确的:

  • BYTE是宏定义为 #define BYTE __uint8_t
  • WORD是宏定义为 #define BYTE __uint16_t
  • DWORD是宏定义为 #define BYTE __uint32_t

如果是,为什么要转换为另一个宏而不是转换为__uint8_t__uint16_t__uint32_t?这样写是为了提高清晰度吗?

我还发现了另一个question,答案包括typedef,还有更多的研究我找到了question about comparing #define and typedef的答案。在这种情况下typedef会更好用吗?

2 个答案:

答案 0 :(得分:5)

这是一种便携式解决方案:

#include <stdint.h>

typedef uint32_t DWORD;   // DWORD = unsigned 32 bit value
typedef uint16_t WORD;    // WORD = unsigned 16 bit value
typedef uint8_t BYTE;     // BYTE = unsigned 8 bit value

答案 1 :(得分:1)

您已在https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx定义了它,并且已在WinAPI的Windows数据类型标头中定义:

typedef unsigned short WORD;
typedef unsigned char BYTE;
typedef unsigned long DWORD;

它是一种类型,而不是宏。