关于GUID的问题:它们总是固定长度,中间数字总是4吗?

goo*_*ate 12 .net c# guid

我刚刚生成了几百万个GUID,把它们变成了一个字符串并得到了长度...它总是一样的.转换为String时,我可以依赖GUID的这个固定长度吗?

此外,GUID的中间数字是否总是"4",如此截图所示?

替代文字

Jim*_*m L 11

是的,长度是固定的,是的,当您使用标准的tostring格式时,中间的数字总是4.GUID中的一些位(几乎在任何非Windows窗口中称为UUID)都是固定的,以指示版本等等.

http://en.wikipedia.org/wiki/Uuid

编辑 我应该补充一点,"4"仅适用于根据.NET中实现的Guid.NewGuid算法生成的Guids.没有什么可以阻止你采取任意字节[16]并将其转换为Guid.因此,对于.Net中当前的算法实现,您只能将其存储为4.如果您从其他来源获取Guids,则无法在4.Net上更新.或者可能是Windows(取决于.Net使用自己的或Windows的生成器)可能会更改GUID的固定数量

例如,以下是完全正常工作的代码,并且不会有4个位置:

        var rand = new Random();
        var byteArray = new byte[16];
        rand.NextBytes(byteArray);
        var g = new Guid(byteArray);
Run Code Online (Sandbox Code Playgroud)

  • 4 是版本号。这取决于它是如何生成的,*而不是*您如何将其转换为字符串。 (2认同)

Gab*_*abe 5

来自Guid.ToString 的文档(不带参数):

此 Guid 的值,格式如下:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中 GUID 的值表示为一组 8、4、4、4 和 12 位且分隔开的一系列小写十六进制数字通过连字符。返回值的示例是“382c74c3-721d-4f34-80e5-57657b6cbc27”。

所以答案是“是”,它的长度总是相同的。

至于4,它是一个版本号(根据http://en.wikipedia.org/wiki/Uuid)。使用该算法生成的每个 GUID 的该位置都会有 4,但较旧的 GUID 将有 1、2 或 3。未来的 GUID 可能有 5 或更高的值。