[encoding] GUID에는 몇 개의 문자가 있습니까?

ASCII 인코딩을 사용하면 GUID에 몇 개의 문자가 있습니까?

중괄호와 대시가 포함 된 Microsoft 스타일에 관심이 있습니다.



답변

에서 MSDN :

GUID는 8 개의 16 진수로 구성된 그룹 1 개, 각각 4 개의 16 진수로 구성된 3 개의 그룹, 12 개의 16 진수로 구성된 그룹으로 구성된 128 비트 값입니다. 다음 예제 GUID는 GUID의 16 진수 그룹화를 보여줍니다. 6B29FC40-CA47-1067-B31D-00DD010662DA

에서 위키 백과 :

위의 형식을 묶기 위해 종종 중괄호가 추가됩니다.

{3F2504E0-4F89-11D3-9A0C-0305E82C3301}

따라서 중괄호가있는 일반적인 16 진수 인코딩에서 총 38 자입니다.

-아담


답변

요약 : 없음.

Adam Davis가 말했듯이 Microsoft 스타일은 ASCII 문자 (0-9 및 AF)의 하위 집합을 사용하여 표시 할 수있는 HEX 인코딩 (중괄호와 대시를 사용하여 더 읽기 쉬움)이지만 특별히 ASCII 인코딩은 아닙니다.

GUID를 표시하는 Microsoft 스타일은 실제로 16 바이트 정수 값인 GUID의 표현 일 뿐이라는 것을 기억하는 것이 중요합니다 (Micheal Trausch가 언급했듯이).

또한 바이트를 다른 문자 집합 (예 : ASCII)으로 변환하여보다 간결한 방법으로 표시 할 수 있습니다.

이론적으로 각 바이트를 확장 된 ASCII 문자 (255 자)로 표시 할 수 있습니다. 이렇게하면 GUID를 16 자 길이 문자열로 저장할 수 있습니다.

공백 문자 (CR, 공백, 탭 등) 및 기타 특수 문자를 포함하기 때문에 읽기가 어렵 기 때문에 GUID를 사람이 읽을 수없는 문자 형식으로 효율적으로 저장하려는 경우에만 의미가 있습니다. , 예를 들어 기본적으로 GUID를 지원하지 않거나 작은 바이너리 값의 빠른 일치를 지원하지 않는 데이터베이스 :
http://en.wikipedia.org/wiki/Extended_ASCII

IMHO는 GUID를보다 간결하게 표시하는 가장 읽기 쉬운 방법은 Base64 인코딩을 사용하는 것입니다.이 인코딩을 사용하면 길이가 22자인 문자열에 저장할 수 있으며 다음과 같이 표시됩니다.

7v26IM9P2kmVepd7ZxuXyQ==

그러나 Jeff Atwood가 자신의 사이트에서 언급했듯이 GUID를 20 자의 ASCII85 인코딩 문자열로 푸시 할 수도 있습니다.

[Rb*hlkkXVW+q4s(YSF0

더 많은 영감을 얻으려면 http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html을 참조하십시오.


답변

Adam이 MSDN 인용문에서 언급했듯이 UUID는 128 비트 값입니다. 즉, 값을 유지하기 위해 16 바이트의 RAM이 필요합니다. 텍스트 표현은 32 바이트 (각 단일 바이트에 대해 2 바이트)와 4 개의 하이픈 및 포함하려는 경우 2 개의 대괄호를 사용합니다. 이것은 38 바이트입니다.

소프트웨어 사용자에게 UUID를 노출하는 경우 대괄호가 있거나없는 UUID를 제공 할 수 있습니다. 값을 어디에 든 저장하는 경우 16 바이트 이진 표현으로 저장하는 것이 가장 좋습니다. 다른 UUID 구현과 상호 운용하는 경우, 이진 UUID 값을 저장할 때 서로 다른 구현이 바이트 순서에 따라 다른 작업을 수행하므로 상호 운용성을 위해 기본 텍스트 형식을 사용할 수 있습니다.


답변

길이는 인코딩에 따라 다릅니다. 이 스 니펫을 사용하여 표준 인코딩 및 길이를 얻을 수 있습니다.

public void Main()
{
    var guid = Guid.Empty;
    Write(guid, "N"); // 32 characters
    Write(guid, "D"); // 36 characters (default)
    Write(guid, "B"); // 38 characters
    Write(guid, "P"); // 38 characters
    Write(guid, "X"); // 68 characters
}

private void Write(Guid guid, string format)
{
    var guidString = guid.ToString(format);
    Console.WriteLine("{0}: {1} ({2} characters)", format, guidString, guidString.Length);
}

자세한 내용은 Guid.ToString 메서드를 참조하십시오.


답변