84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
指针变量 PVOID lpbuffer 指向一个内存地址,
变量 GUID g = {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}};
请问如何判断 指针 lpbuffer 指向的 内容是否等于 GUID ?
根据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变量为比较结果
分两种情况:
地址不同,假设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;
雷雷
根据MSDN上GUID structure的定义
GUID是一个结构体,其没有重载==运算符,所以要想比较2个GUID,要么实现==运算符,要么老老实实地逐个比较成员变量。
分两种情况:
地址不同,假设GUID类型重载了==运算符
地址相同,字节数相同则相等
至于GUID类型未重载==运算符但知道其内部结构的可以参见其他答主@一代键客的答案
而GUID类型未重载==运算符也不知道其内部结构我觉得可以逐个字节比较
雷雷