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


82

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

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


2
그것들은 모두 정확히 같은 길이입니다. 하나의 문자를 세면 모든 문자의 길이를 알 수 있습니다.
Greg Hewgill

1
@Greg-길이가 변하지 않는다는 것을 이해하지 않는 한 그것은 매우 가난한 가정입니다.
Adam Davis

8
길이가 다를 경우이 질문은 "끈 조각이 얼마나됩니까?"라고 묻는 것과 같습니다. 대신, 이것은 "12 개에 몇 개의 계란?"을 묻는 것입니다.
Greg Hewgill

8
이 질문을 검색했을 때 모든 답변은 guid의 정의를 가리 켰습니다. 원하신다면 저를 비하하되, 저는이 특별한 질문에 대한 답을 쉽게 찾을 수 있도록 노력하고 있습니다.
Jim Counts

2
나는 당신이 말하는 것을 이해하지만 누군가 NewDataX를 방금 소개했다면 길이에 대한 질문은 유효하며 NewDataX가 무엇인지 이해할 때까지 당신이 본 것이 다른 모든 NewDataX의 예라고 가정 할 수 없습니다.
Adam Davis

답변:


130

에서 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 자입니다.

-아담


@magnifico-이 답변의 마지막 단락 참조 : "그러므로 중괄호를 사용하는 일반적인 16 진수 인코딩으로 총 38 자입니다."
Randolpho

1
magnifico와 싸울 필요가 없습니다. 그는 질문을하고 누가 가장 적절한 대답을했는지 결정할 수 있습니다. 그는 이것에 대한 다른 대답을 선호하는 이유가 있습니다.
Adam Davis

@Beska는 Stack Overflow의 목적이기 때문입니다. 한 사람에게 물고기를 건네주는 대신 같은 물고기를 백만 명에게 건네주세요.
bugloaf

@bugloaf 흠. 내 의견은 모두 현재 상황에서 의미가 없었기 때문에 삭제 된 내용과 관련이 있다고 생각 합니다. 첫 번째 의견은 사라진 것에 대한 매우 구체적으로 응답 한 입니다. 나는 그들을 제거했습니다. (현재의 맥락에서 나는 대답에 대해 난간을 벌이고있는 것처럼 보였습니다. 이것은 좋은 대답이고, 제가하는 것이
말도 안되며

@AdamDavis 나는 38이 아니라 32를 계산합니다. 편집 : 중괄호와 대시를 세고 있어야합니다.
KyleM 2013

31

요약 : 없음.

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을 참조하십시오.


3
내가 여기에 C #에서 아스키-85 인코더 / 디코더를 게시 : stackoverflow.com/questions/2827627/...
sheikhjabootie

1
이 답변의 상단에 크고 굵은 "None"이있어 독자를 유인하고 TL; DR의 역할을합니다. ;)
jpmc26

14

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

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


6

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

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 메서드를 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.