GUID中有多少个字符?


82

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

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


2
它们的长度完全相同。如果将一个字符计算在内,则将知道所有字符的长度。
Greg Hewgill

1
@Greg-这是一个非常糟糕的假设,除非您了解长度不会变化。
亚当·戴维斯

8
如果长度不同,那么这个问题就像是问:“一根绳子有多长?” 相反,这是在询问“一打中有多少个鸡蛋?”
格雷格·休吉尔09年

8
当我用谷歌搜索这个问题时,每个答案都指向一个GUID的定义。如果您愿意,请否决我,但我只是想让这个容易回答的问题的答案更容易找到,而以后的提问者则无需计数。
Jim Count's

2
我理解您在说什么,但是如果有人刚刚被介绍过NewDataX,那么有关长度的问题就成立了,您不能以为所见即是其他NewDataX的例证,直到您了解NewDataX是什么。
亚当·戴维斯

Answers:


130

MSDN

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

维基百科

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

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

因此,典型的带花括号的十六进制编码中总共有38个字符。

-亚当


@magnifico-请参阅此答案的最后一段:“因此,在带有花括号的典型十六进制编码中,总共有38个字符。”
Randolpho

1
无需与magnifico战斗-他问了这个问题,他可以决定谁给出了最相关的答案。我敢肯定,他有理由选择另一个答案。
亚当·戴维斯

@Beska,因为这就是堆栈溢出的用途。与其将一条鱼交给一个人,不如将一条鱼交给一百万人。
bugloaf

@bugloaf嗯。我怀疑我的两个意见是参考的东西,已经被删除了,因为他们在目前情况下没有意义......,第一个是非常明确的回应的东西不见了。我已经摆脱了它们。(在当前情况下,看来我在反对答案,这是一个很好的答案,对我来说这毫无意义,而且您正确地指出了这一点。)
Beska

@AdamDavis我数32而不是38。编辑:您一定在数括号和破折号,没关系。
KyleM 2013年

31

TL; DR:无。

正如亚当·戴维斯(Adam Davis)所说,Microsoft风格是十六进制编码(用大括号和破折号使它更具可读性)可以使用一部分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


3
我在这里张贴在C#中的ASCII-85编码器/解码器:stackoverflow.com/questions/2827627/...
sheikhjabootie

1
如果仅此答案的顶部带有一个大胆的“ None”,以吸引读者并充当TL; DR。;)
jpmc26 2017年

14

正如Adam在MSDN报价中提到的那样,UUID是128位值。这意味着它们占用16个字节的RAM来保存值。文本表示形式将占用32个字节(每个字节两个字节),四个连字符和两个括号(如果要包括在内);总计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方法:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.