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更好。
Delphi中比較GUID是否相等
1 comparemem guid1,guid2,sizeof tguid 最開始時想到的方法。檢視delphi中tguid的定義可以看到tguid實際上是乙個結構。對於結構的比較來說最方便的就是記憶體直接比較了。tguid packed record d1 longword d2 word d3 ...
Integer比較是否相等問題
1.integer 與 integer 進行比較 2.integer 與 int 進行比較 第一種 integer 與 int進行比較 integer 與int進行比較,會自動比較 兩個的值是否相等,如同 int與int這種基本型別的比較一樣。第二種 integer 與 integer 進行比較 i...
BigDecimal如何比較是否相等
例子 bigdecimal a new bigdecimal 2.00 bigdecmial b new bigdecimal 2 system.out.println a.equals b 輸出結果是 false 原因是 bigdecimal比較時,不僅比較值,而且還比較精度?解決方法 bigde...