¿Cuántos caracteres hay en un GUID?


82

Usando la codificación ASCII, ¿cuántos caracteres hay en un GUID?

Me interesa el estilo de Microsoft, que incluye las llaves y los guiones.


2
Todos tienen exactamente la misma longitud. Si cuenta los caracteres en uno, sabrá la longitud de todos ellos.
Greg Hewgill

1
@Greg: es una suposición muy pobre, a menos que comprenda que la longitud no variará.
Adam Davis

8
Si la longitud variara, entonces esta pregunta sería como preguntar, "¿cuánto mide un trozo de cuerda?" En cambio, se trata de preguntar "¿cuántos huevos hay en una docena?"
Greg Hewgill

8
Cuando busqué en Google esta pregunta, cada respuesta solo apuntaba a una definición de guía. Vota en contra si quieres, pero solo estoy tratando de que la respuesta a esta pregunta específica sea más fácil de encontrar, sin necesidad de contar para los futuros interesados.
Jim Counts

2
Entiendo lo que está diciendo, pero si alguien acaba de ser presentado a NewDataX, la pregunta en cuanto a la longitud es válida y no puede asumir que lo que ha visto ejemplifica todos los demás NewDataX hasta que comprenda qué es un NewDataX.
Adam Davis

Respuestas:


130

Desde MSDN :

Un GUID es un valor de 128 bits que consta de un grupo de 8 dígitos hexadecimales, seguido de tres grupos de 4 dígitos hexadecimales cada uno, seguidos de un grupo de 12 dígitos hexadecimales. El siguiente ejemplo de GUID muestra las agrupaciones de dígitos hexadecimales en un GUID: 6B29FC40-CA47-1067-B31D-00DD010662DA

De Wikipedia :

A menudo se agregan llaves para encerrar el formato anterior, como tal:

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

Entonces, un total de 38 caracteres en la codificación hexadecimal típica con llaves.

-Adán


@magnifico: consulte el último párrafo de esta respuesta: "Entonces, un total de 38 caracteres en la codificación hexadecimal típica con llaves".
Randolpho

1
No hay necesidad de pelear con Magnifico: él hizo la pregunta, él decide quién dio la respuesta más relevante. Tiene sus razones para preferir la otra respuesta a esta, estoy seguro.
Adam Davis

@Beska porque para eso está Stack Overflow. En lugar de entregar un pescado a una persona, entregue el mismo pescado a un millón de personas.
bugloaf

@bugloaf Hmm. Sospecho que mis dos comentarios se referían a algo que se ha eliminado, ya que no tenían sentido en el contexto actual ... y el primero era muy específicamente una respuesta a algo que se había ido. Me he deshecho de ellos. (En el contexto actual, parecía que estaba criticando la respuesta, que es una buena respuesta, y que no tendría sentido para mí, y que estaba llamando correctamente).
Beska

@AdamDavis Cuento 32, no 38. editar: debes estar contando las llaves y los guiones, no importa.
KyleM

31

TL; DR: Ninguno.

Como dijo Adam Davis, el estilo de Microsoft es la codificación HEX (con llaves y guiones para que sea más legible) que se puede mostrar usando un subconjunto de caracteres ASCII (0-9 y AF), pero esta no es específicamente codificación ASCII.

Supongo que es importante recordar que el estilo de microsoft de mostrar GUID es solo una representación de un GUID, que en realidad es un valor integral de 16 bytes (como dijo Micheal Trausch).

También puede presentarlo de formas diferentes y más compactas convirtiendo los bytes en un conjunto de caracteres diferente (como ASCII).

En teoría, puede mostrar cada byte como un carácter ASCII extendido (255 caracteres), lo que le permitiría guardar un GUID como una cadena de 16 caracteres.

Sin embargo, no sería muy legible porque incluiría caracteres de espacio en blanco (CR, espacio, tabulación, etc.) y otros caracteres especiales, por lo que esto solo tendría sentido si desea guardar de manera eficiente un GUID en un formato de carácter no legible , por ejemplo, en una base de datos que no admite de forma nativa GUID o coincidencia rápida de pequeños valores binarios: http://en.wikipedia.org/wiki/Extended_ASCII

En mi humilde opinión, la forma más legible de mostrar un GUID más compacto sería usar la codificación Base64, que le permite guardarlo en una cadena con una longitud de 22 caracteres, y lo haría lucir así:

7v26IM9P2kmVepd7ZxuXyQ==

Pero como afirma Jeff Atwood en su sitio, también puede insertar un GUID en una cadena codificada en ASCII85 con 20 caracteres:

[Rb*hlkkXVW+q4s(YSF0

Para obtener más inspiración, consulte: http://www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html


3
Publiqué un codificador / decodificador Ascii-85 en C # aquí: stackoverflow.com/questions/2827627/…
sheikhjabootie

1
Si solo esta respuesta tuviera un "Ninguno" grande y en negrita en la parte superior para atraer a los lectores y actuar como un TL; DR. ;)
jpmc26

14

Como mencionó Adam en la cita de MSDN, los UUID son valores de 128 bits. Esto significa que necesitan 16 bytes de RAM para mantener un valor. Una representación de texto ocupará 32 bytes (dos bytes por cada byte individual), más los 4 guiones, más los dos corchetes si desea incluirlos; esto equivale a 38 bytes.

Solo tenga en cuenta que si está exponiendo los UUID a los usuarios de su software, ellos pueden proporcionar el UUID con o sin los corchetes. Si está almacenando el valor en cualquier lugar, es mejor almacenarlo como la representación binaria de 16 bytes. Si está interoperando con otras implementaciones de UUID, es posible que desee utilizar el formato de texto básico para la interoperabilidad, ya que diferentes implementaciones hacen cosas diferentes en el orden de los bytes al almacenar un valor de UUID binario.


6

La longitud depende de la codificación. Puede obtener la codificación y la longitud estándar con este fragmento:

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);
}

Consulte el método Guid.ToString para obtener más detalles:

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.