85

使用 ASCII 编码,一个 GUID 中有多少个字符?

我对 Microsoft 样式感兴趣,其中包括大括号和破折号。

4

4 回答 4

133

来自MSDN

GUID 是一个 128 位值,由一组 8 个十六进制数字组成,后跟三组每组 4 个十六进制数字,然后是一组 12 个十六进制数字。以下示例 GUID 显示了 GUID 中的十六进制数字分组:6B29FC40-CA47-1067-B31D-00DD010662DA

来自维基百科

通常会添加大括号来包含上述格式,例如:

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

所以在典型的带花括号的十六进制编码中总共有 38 个字符。

-亚当

于 2009-03-03T19:02:05.040 回答
34

TL;DR:没有。

正如 Adam Davis 所说,Microsoft 风格是 HEX 编码(带有大括号和破折号以使其更具可读性),可以使用 ASCII 字符的子集(0-9 和 AF)来显示,但这并不是专门的 ASCII 编码。

我想重要的是要记住显示 GUID 的微软风格只是 GUID 的表示,它实际上是一个 16 字节的整数值(如 Micheal Trausch 所述)。

您还可以通过将字节转换为不同的字符集(如 ASCII),以不同的、更紧凑的方式呈现它。

从理论上讲,您可以将每个字节显示为扩展的 ASCII 字符(255 个字符),这将允许您将 GUID 保存为 16 个字符长度的字符串。

但它的可读性不是很好,因为它会包含空白字符(CR、空格、制表符等)和其他特殊字符,因此只有当您想以非人类可读的字符格式有效地保存 GUID 时,这才有意义,例如在不支持 GUID 或快速匹配小二进制值的数据库中: http ://en.wikipedia.org/wiki/Extended_ASCII

恕我直言,显示更紧凑的 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

于 2010-07-14T15:49:20.993 回答
14

正如亚当在 MSDN 引用中提到的那样,UUID 是 128 位值。这意味着它们需要 16 字节的 RAM 来保存一个值。文本表示将占用 32 个字节(每个单个字节两个字节),加上 4 个连字符,加上两个括号,如果你想包含它们;这相当于 38 个字节。

请记住,如果您向软件的用户公开 UUID,他们可能会提供带有或不带括号的 UUID。如果您将值存储在任何地方,最好将其存储为 16 字节二进制表示。如果您正在与其他 UUID 实现进行互操作,您可能希望使用基本文本格式来实现互操作性,因为不同的实现在存储二进制 UUID 值时对字节顺序执行不同的操作。

于 2009-03-03T19:06:38.197 回答
7

长度取决于编码。您可以使用此代码段获得标准编码和长度:

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方法:

于 2014-03-31T15:14:01.657 回答