DWORD变量,带低/高字和低/高字节

Mid*_*das 2 c winapi types dword

在C中我们如何读取和创建DWORD具有低字和高字以及低字节和高字节的变量?

Pup*_*ppy 6

WinAPI为这些类型的操作提供宏,例如:

  • 此外,您还分别有“HIBYTE”和“LOBYTE” (2认同)

Cli*_*ord 4

在 Win32 中,DWORD是 32 位无符号整数。在其他情况下,它可能意味着其他含义。

假设 Win32 定义(以及其他 Win32 typedef):

BYTE lsb = 0x11 :
BYTE next_lsb = 0x22 :
BYTE next_msb = 0x33 :
BYTE msb = 0x44 :

DWORD dword_from_bytes = (msb << 24) | (next_msb << 16) | (next_lsb << 8) | lsb ;
Run Code Online (Sandbox Code Playgroud)

dword_from_bytes就会有价值0x44332211

相似地:

WORD lsw = 0x1111 :
WORD msw = 0x2222 :

DWORD dword_from_words = (msw << 16) | lsw ;
Run Code Online (Sandbox Code Playgroud)

dword_from_words就会有价值0x22221111

dword_from_bytes例如,要提取第三个字节:

next_msb = (dword_from_bytes >> 16) & 0xff ;
Run Code Online (Sandbox Code Playgroud)

尽管& 0xff在给定 的类型的情况下, 不是严格必需的next_msb,但如果接收器的类型大于 8 位,它将屏蔽 MSB 位。

  • 最好使用专用宏,例如“HIWORD”、“LOWORD”、“MAKELONG”等。因为不同的处理器使用不同的字节顺序(小/大端等) (3认同)