首页 > 社区问答列表 >c++ - 如何判断两个变量是否相等

c++ - 如何判断两个变量是否相等

  1. 指针变量 PVOID lpbuffer 指向一个内存地址,

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

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

  • typecho
  • typecho    2017-06-17 09:17:563楼

    根据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变量为比较结果

    +0添加回复

  • 回复
  • 学习ing
  • 学习ing    2017-06-17 09:17:562楼

    分两种情况:

    地址不同,假设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;

    +0添加回复

  • 回复