Delphi中比較GUID是否相等

2021-04-14 11:07:27 字數 1045 閱讀 7005

1、comparemem(@guid1, @guid2, sizeof(tguid))

最開始時想到的方法。

檢視delphi中tguid的定義可以看到tguid實際上是乙個結構。對於結構的比較來說最方便的就是記憶體直接比較了。

tguid = packed record

d1: longword;

d2: word;

d3: word;

d4: array[0..7] of byte;

end;

2、sysutils.isequalguid(const guid1, guid2: tguid)

經人提醒後發現在sysutils單元已經有了乙個這樣專門比較guid是否相等的函式。檢視sysutils的原始碼可以看到,在windows下直接呼叫ole32.dll的函式isequalguid,在linux下將guid轉換成整型陣列然後比較陣列中的每個元素。效果和上面的comparemem一樣。

function isequalguid; external 'ole32.dll' name 'isequalguid';

function isequalguid(const guid1, guid2: tguid): boolean;

vara, b: pintegerarray;

begin

a := pintegerarray(@guid1);

b := pintegerarray(@guid2);

result := (a^[0] = b^[0]) and (a^[1] = b^[1]) and (a^[2] = b^[2]) and (a^[3] = b^[3]);

end;

當然,我們可以一次比較tguid中的字段d1、d2、d3、d4,但這種方法顯然就沒有轉成陣列後比較那麼簡潔了。

上面提到的兩種方法都可以用,並且在效率上也差不多。不過出於通用性的考慮,建議用delphi封裝的函式sysutils.isequalguid更好。

比較GUID是否相等

1 comparemem guid1,guid2,sizeof tguid 最開始時想到的方法。檢視delphi中tguid的定義可以看到tguid實際上是乙個結構。對於結構的比較來說最方便的就是記憶體直接比較了。tguid packed record d1 longword d2 word d3 ...

java中比較兩個map是否相同

對於所有繼承於abstractmap的map類 基本上jdk中的map都繼承了 直接使用map.equals 即可 原始碼解析 abstractmap重寫了equals方法,保證對兩個相同內容的map呼叫equals比較結果為真,原始碼如下 public boolean equals object ...

在delphi中生成GUID

什麼是 guid guid 的格式為8 4 4 4 12 xx x x x 其中每個 x 是 0 9 或 a f 範圍內的乙個十六進製制的數字。例如 6f9619ff 8b86 d011 b42d 00c04fc964ff 即為有效的 guid 值。為什麼要使用 guid 世界上的任何兩台計算機都不...