c++ - 如何判断两个变量是否相等
给我你的怀抱
给我你的怀抱 2017-06-17 09:15:56
[C++讨论组]
  1. 指针变量 PVOID lpbuffer 指向一个内存地址,

  2. 变量 GUID g = {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}};

请问如何判断 指针 lpbuffer 指向的 内容是否等于 GUID ?

给我你的怀抱
给我你的怀抱

全部回复(3)
typecho

根据MSDN上GUID structure的定义

typedef struct _GUID {
  DWORD Data1;
  WORD  Data2;
  WORD  Data3;
  BYTE  Data4[8];
} GUID;

GUID是一个结构体,其没有重载==运算符,所以要想比较2个GUID,要么实现==运算符,要么老老实实地逐个比较成员变量。

// PVOID lpbuffer;
// GUID g = {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}};
GUID *p = (GUID*)lpbuffer;
BOOL flag = FALSE;
if ((*p->Data1 == g.Data1)
    && (*p->Data2 == g.Data2)
    && (*p->Data3 == g.Data3)){
    flag = TRUE;
    for(int i; i < 8; i++){
       if (*p->Data4[i] != g.Data4[i]){
           flag = FALSE;
       }
    }
}

// flag变量为比较结果
学习ing

分两种情况:

地址不同,假设GUID类型重载了==运算符

if (lpbuffer != &g && *(*GUID)lpbuffer == g) {}  // *为取值符,判断指针指向地址存放的值是否等于变量g

地址相同,字节数相同则相等

if (lpbuffer == &g && sizeof(*lpbuffer) == sizeof(g)) {} // &为取地址符,判断指针是否指向变量g的地址

至于GUID类型未重载==运算符但知道其内部结构的可以参见其他答主@一代键客的答案

而GUID类型未重载==运算符也不知道其内部结构我觉得可以逐个字节比较

    if (sizeof(*lpbuffer) != sizeof(g)) return false;
    size_t size = sizeof(*lpbuffer);
    size_t i = 0;
    char* p1 = (char*)lpbuffer;
    char* p2 = &g;
    while ( i != size ) {
        if (*p1 != *p2) return false;
        p1++;
        p2++;
        i++;
    }
    return true;
ringa_lee
if (memcmp(lpbuffer, GUID, 16) == 0) {
    ...
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号