获取WORD的高位字节和低位字节

本文通过实例演示了在Windows环境下DWORD_PTR与DWORD的区别与联系,包括它们如何存储地址和整数值,并展示了如何使用这两个类型来获取和显示内存地址及整数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在WinDef.h中有这样两组宏定义:

#define LOBYTE(w)    ((BYTE)(((DWORD_PTR)(w)) & 0xff))
#define HIBYTE(w)    ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))

LOBYTE(w)的作用是,获取WORD的低位字节;HIBYTE(w)的作用,获取WORD的高位字节。

DWORD_PTR, 实际上是unsigned long类型的数据类型,但是它在windows操作系统中表示储存的是一个地址的整数形式,也可以储存DWORD的数值。 DWORD,实际上也是unsigned long类型的数据类型,也可以储存一个地址。
DWORD_PTR和DWORD差别

  • DWORDPTR这个类型至少可以确保放得下DWORD并且确保放得下一个指针;
  • DWORD的长度是固定得32位, 而指针的长度是跟硬件、系统、编译器什么的有关系的。 所以如果你是在做32位程序,那么 DWORD_PTR就跟DWORD是一回事。如果你是在做64位程序,那么 DWORD_PTR是64位的, 而DWORD永远是32位。
//main.cpp
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    //DWORD_PTR和DWORD都储存一个地址指针
    int a = 200;
    DWORD_PTR ptr = (DWORD_PTR)&a;
    DWORD dw = (DWORD)&a;
    cout.setf(ios_base::uppercase);
    cout << &a << endl;
    cout << setw(8) << setfill('0') << uppercase << hex << ptr << endl;
    cout << setw(8) << setfill('0') << uppercase << hex << dw << endl;
    cout << nouppercase << dec;
    cout << "a = " << *(int *)ptr << endl;
    cout << "a = " << *(int *)dw << endl;
    //DWORD_PTR和DWORD都储存一个整型
    int b = 100;
    DWORD_PTR ptrb = b;
    DWORD dwb = b;
    cout << "b = " << ptrb << endl;
    cout << "b = " << dwb << endl;
    getchar();
    return 0;
}

运行结果:

0032F63C
0032F63C
0032F63C
a = 200
a = 200
b = 100
b = 100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值