GUID中有多less个字符?

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

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

来自MSDN :

一个GUID是一个128位值,由一组8个hex数字组成,后面跟着三组4个hex数字,随后是一组12个hex数字。 下面的示例GUID显示GUID中的hex数字的分组:6B29FC40-CA47-1067-B31D-00DD010662DA

维基百科 :

通常使用大括号来包含上面的格式,如下所示:

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

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

-亚当

TL; DR:无。

正如亚当·戴维斯(Adam Davis)所说,微软风格是HEX编码(使用大括号和破折号使其更易读),可以使用ASCII字符(0-9和AF)的子集来显示,但这不是专门的ASCII编码。

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

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

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

虽然它会包含空格字符(CR,空格,制表符等)和其他特殊字符,但是它不是非常可读,所以如果要以非人类可读的字符格式有效地保存GUID ,例如,在一个本身不支持GUID的数据库中,或者快速匹配小的二进制值: http : //en.wikipedia.org/wiki/Extended_ASCII

恕我直言,最可读的方式来显示一个更紧凑的GUID将使用Base64编码,它允许您将其保存在长度为22个字符的string中,并将使其看起来像这样:

 7v26IM9P2kmVepd7ZxuXyQ== 

但是正如Jeff Atwood在他的网站上所说的那样,你也可以把一个GUID转换成一个ASCII85编码的string,其中包含20个字符:

 [Rb*hlkkXVW+q4s(YSF0 

欲了解更多灵感,请参阅: http : //www.codinghorror.com/blog/2005/10/equipping-our-ascii-armor.html

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

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

长度取决于编码。 你可以得到这个代码的标准编码和长度:

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