使用 ASCII 编码,一个 GUID 中有多少个字符?
我对 Microsoft 样式感兴趣,其中包括大括号和破折号。
正如 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
正如亚当在 MSDN 引用中提到的那样,UUID 是 128 位值。这意味着它们需要 16 字节的 RAM 来保存一个值。文本表示将占用 32 个字节(每个单个字节两个字节),加上 4 个连字符,加上两个括号,如果你想包含它们;这相当于 38 个字节。
请记住,如果您向软件的用户公开 UUID,他们可能会提供带有或不带括号的 UUID。如果您将值存储在任何地方,最好将其存储为 16 字节二进制表示。如果您正在与其他 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方法: