c++ - Comment déterminer si deux variables sont égales
给我你的怀抱
给我你的怀抱 2017-06-17 09:15:56
0
3
1353
  1. La variable pointeur PVOID lpbuffer pointe vers une adresse mémoire,

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

Comment déterminer si le contenu pointé par le pointeur lpbuffer est égal au GUID ?

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

répondre à tous(3)
typecho

Selon la définition de la structure GUID sur MSDN

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

GUID est une structure qui n'a pas d'opérateur == surchargé, donc si vous souhaitez comparer deux GUID, vous devez soit implémenter l'opérateur ==, soit comparer honnêtement les variables membres une par une.

// 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

Il existe deux situations :

Les adresses sont différentes, en supposant que le type GUID surcharge l'opérateur ==

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

L'adresse est la même et le nombre d'octets est le même

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

Quant au type GUID qui ne surcharge pas l'opérateur == mais connaît sa structure interne, vous pouvez vous référer à la réponse d'un autre répondant @一代Key客

Le type GUID n'a pas surchargé l'opérateur == et ne connaît pas sa structure interne, je pense qu'il peut être comparé octet par octet

.
    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;
左手右手慢动作
if (memcmp(lpbuffer, GUID, 16) == 0) {
    ...
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal