Pergunta

Usando a codificação ASCII, quantos caracteres existem em um GUID?

Estou interessado no estilo Microsoft, que inclui as chaves e traços.

Foi útil?

Solução

A partir MSDN :

Um GUID é um valor de 128 bits que consiste de um grupo de 8 dígitos hexadecimais, seguido por três grupos de quatro dígitos hexadecimais cada, seguido pela um grupo de 12 dígitos hexadecimais. Os seguintes exemplo GUID mostra o agrupamentos de dígitos hexadecimais em um GUID: 6B29FC40-ca47-1067-B31D-00dd010662da

A partir Wikipedia :

Muitas vezes chaves são adicionadas para incluir a formato acima, tais como:

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

Assim, um total de 38 caracteres na hexadecimal típico que codifica com chavetas.

-Adam

Outras dicas

TL; DR: Não.

Como Adam Davis afirmou, o estilo Microsoft é a codificação HEX (com suspensórios e traços para torná-lo mais legível) que podem ser exibidos usando um subconjunto de caracteres ASCII (0-9 e AF), mas isso não é especificamente codificação ASCII .

Eu acho que é importante lembrar que o estilo Microsoft de exibir GUID de é apenas uma representação de um GUID, que na verdade é um valor inteiro de 16 bytes (como Micheal Trausch indicado).

Você também pode apresentá-lo de diferentes maneiras, mais compactos, convertendo os bytes em um conjunto de caracteres diferente (como ASCII).

Teoricamente você pode exibir cada byte como um caractere ASCII estendido (255 caracteres), o que permite que você salve um GUID como uma cadeia de comprimento de 16 caracteres.

Não seria muito legível, porque embora ele iria incluir espaços em branco caracteres (CR, espaço, guia, etc) e outros caracteres especiais, então isso só faria sentido se você quiser eficiente salvar um GUID em um não-humano formato de caracteres legíveis, por exemplo, em um banco de dados que não suporta nativamente GUID do rápido ou correspondência de valores binários pequenos: http://en.wikipedia.org/wiki/Extended_ASCII

IMHO a forma mais legível para exibir um GUID mais compacto seria a utilização de codificação Base64, que permite que você salve-o em uma cadeia com um comprimento de 22 caracteres, e tornaria semelhante a este:

7v26IM9P2kmVepd7ZxuXyQ==

Mas, como Jeff Atwood afirma em seu site, você também pode empurrar um GUID em uma string codificada ASCII85 com 20 caracteres:

[Rb*hlkkXVW+q4s(YSF0

Para mais inspiração, veja: http://www.codinghorror.com/blog/ 2005/10 / equipando-nosso-ascii-armor.html

Como Adam mencionado a partir da citação MSDN, UUID são valores de 128 bits. Isso significa que eles tomam 16 bytes de RAM para armazenar um valor. A representação de texto terá 32 bytes (dois bytes para cada único byte), além dos 4 hífens, mais os dois suportes se você deseja incluir aquelas; Isso equivale a 38 bytes.

Basta ter em mente que se você está expondo UUIDs para usuários de seu software, eles podem fornecer a UUID com ou sem os suportes. Se você está armazenando o valor em qualquer lugar, é melhor guardá-la como a representação binária de 16 bytes. Se você está interoperabilidade com outras implementações UUID, você pode querer usar o formato de texto básico para a interoperabilidade, uma vez que diferentes implementações fazer coisas diferentes com a ordem de bytes quando armazenar um valor UUID binário.

O comprimento depende da codificação. Você pode obter as codificações padrão e comprimento com este trecho:

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 Método para mais detalhes:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top