我正在寻找最简单的方法来比较C ++中两个相等的GUID。当然有一个预定义的功能。
该解决方案需要与Visual C ++ 2010一起使用。
更新
我说的是Guiddef.h中定义的GUID:
typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
答案 0 :(得分:10)
也许您想要IsEqualGUID(在幕后使用memcmp)或只使用operator==
(为您调用IsEqualGUID)。
答案 1 :(得分:2)
==运算符是否没有超载为您执行此操作?或者使用IsEqualGUID。
答案 2 :(得分:-2)
FFWD到2020年以及Visual Studio 2019的世界。假设OP已升级到该版本,并且至少使用C ++ 17。
提供的GUID结构为“规范”形状:
String[] cmdline = { "sh", "-c", "cat /sdcard/file1 >> /sdcard/file2" };
try {
Runtime.getRuntime().exec(cmdline);
} catch (Exception s) {
finishAffinity();
}
两个GUID最快的比较是
extern "C" {
typedef struct _GUID {
const unsigned long Data1;
const unsigned short Data2;
const unsigned short Data3;
const unsigned char Data4[ 8 ];
} GUID;
} // "C"
用法
constexpr inline bool
equal_guid (const GUID & rguid1, const GUID & rguid2)
noexcept
{
return
rguid1.Data1 == rguid2.Data1 &&
rguid1.Data2 == rguid2.Data2 &&
rguid1.Data3 == rguid2.Data3 &&
rguid1.Data4[0] == rguid2.Data4[0] &&
rguid1.Data4[1] == rguid2.Data4[1] &&
rguid1.Data4[2] == rguid2.Data4[2] &&
rguid1.Data4[3] == rguid2.Data4[3] &&
rguid1.Data4[4] == rguid2.Data4[4] &&
rguid1.Data4[5] == rguid2.Data4[5] &&
rguid1.Data4[6] == rguid2.Data4[6] &&
rguid1.Data4[7] == rguid2.Data4[7] ;
}
我可能认为这是用于比较两个GUID的最简单,最快的标准C ++解决方案。
请参阅C ++ 11 Godbolt sample。在其中还提供了基于constexpr GUID dbjlog =
{0xce863f32,0x799c,0x11d2,{0x94,0xef,0x00,0x00,0x00,0x00,0x00,0x00}};
constexpr GUID thelog =
{0xce863f40,0x799c,0x11d2,{0x94,0xef,0x00,0x00,0x00,0x00,0x00,0x00}};
int main(int , char **) {
static_assert( equal_guid( dbjlog, dbjlog) ) ;
static_assert( ! equal_guid( dbjlog, thelog) ) ;
return 42; // mandatory
}
的函数,但这显然不是编译时的事。