c++ - 如何判斷兩個變數是否相等
给我你的怀抱
给我你的怀抱 2017-06-17 09:15:56
0
3
1269
  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;
      左手右手慢动作

      雷雷

        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!