比較GUID是否相等

2022-06-08 19:21:12 字數 975 閱讀 1990

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