2013-07-24 68 views
0

在調試,爲什麼當你看到一個GUID的對象,也有非公共成員內部奇怪的變量?這是我調試中顯示的內容:C#GUID值奇怪

guid={7b15cd1-69f3-e2111-bd64-001dd8b82a4f} 

_a = 2065026481 
_b = 27123 
_c = -7663 
_d = 189 
_e = 100 
_f = 0 
_g = 29 
_h = 216 
_i = 184 
_j = 42 
_k = 79 
+1

爲什麼你認爲這些值是奇怪的(如果它是私有的)? –

+0

嗯..也許他們與Guid結構的實施有關? (...並關閉) – spender

+0

隨時瞭解:http://www.jetbrains.com/decompiler/ – spender

回答

7
guid={7b15cd1-69f3-e2111-bd64-001dd8b82a4f} 

_a = 2065026481 // = 7b15cd1 
_b = 27123 // = 69f3 
_c = -7663 // = e2111 
_d = 189 // = bd 
_e = 100 // = 64 
_f = 0 // = 00 
_g = 29 // = 1d 
_h = 216 // = d8 
_i = 184 // = b8 
_j = 42 // = 2a 
_k = 79 // = 4f 
2

這並不奇怪。通過運行Calc.exe來啓動Windows計算器。點擊查看+程序員選擇內置的StackOverflow用戶模式。鍵入「2065026481」並單擊十六進制單選按鈕。注意與{guid}值的第一部分的相似性。

重複其他部分,你會看到比賽。

十六進制是程序員的方式與16分的手指,而不是10具有16個手指是計算機的構建方式更好的匹配計數。它們使用2而不是10的冪。只有1和0,一個十六進制數字覆蓋4位。

由此得出的較大結論是Guid是而不是只是一個隨機數。它由部分組成。部分帶有一個意思,你可以閱讀RFC 4122,如果你想獲得它的底部。如果你想了解機器的工作方式,這是一個好主意。每個木匠都應該知道錘子是如何工作的。但他們必須先了解指甲,我建議this book知道釘子是什麼樣子。

0

我不知道GUID的整個映射,但是那些內部變量只是代表了整個GUID的部分。不同的是,調試器顯示_a,_b等在基體10,而GUID以十六進制示出。

在你的例子中,如果我們看最後兩部分,它們映射到guid的最後4位數。

_j = 42 (Dec) 2a (Hex) 
_k = 79 (Dec) 4f (Hex)