2013-07-24 2 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 사용자 모드를 선택하려면 View + Programmer를 클릭하십시오. '2065026481'을 입력하고 Hex 라디오 버튼을 클릭하십시오. {guid} 값의 첫 번째 부분과의 유사성에 주목하십시오.

다른 부분을 반복하면 일치하는 부분이 표시됩니다.

16 진수는 프로그래머가 10 개 대신 16 개를 계산하는 방식입니다. 16 개 손가락을 사용하면 컴퓨터를 만드는 방법에 훨씬 더 적합합니다. 그것들은 10이 아닌 2의 거듭 제곱을 사용합니다. 단지 1과 0, 한 16 진수는 4 비트를 포함합니다.

더 큰 결론은 Guid는 이 아니며은 임의의 숫자입니다. 부품으로 구성됩니다. 그 부분은 의미가 있습니다, 당신은 그것의 바닥에 가고 싶다면 RFC 4122을 읽을 수 있습니다. 어떤 기계가 작동하는지 배우고 싶다면 좋은 생각입니다. 목수는 망치가 어떻게 작동하는지 알아야합니다. 그러나 그들은 손톱을 먼저 이해해야합니다. 나는 손톱이 어떤 모양인지 알기 위해 this book을 추천합니다.

0

GUID의 전체 매핑을 알 수는 없지만 이러한 내부 변수는 전체 GUID의 일부를 나타냅니다. 차이점은 디버거가 10 진수에 _a, _b 등을 표시하는 반면 GUID는 16 진수로 표시된다는 것입니다.

예를 들어, 마지막 두 부분을 보면 guid의 마지막 4 자리로 매핑됩니다.

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