c# - 关于 GUID 的 : Are they always fixed in length, 的问题,中间的数字总是 4 吗?

标签 c# .net guid

我刚刚生成了数百万个 GUID,将它们变成了一个字符串并得到了长度……它始终是相同的。在转换为字符串时,我可以依赖这个固定长度的 GUID 吗?

此外,GUID 的中间数字是否始终如屏幕截图所示“4”?

alt text

最佳答案

是的,长度是固定的,是的,当您使用标准的 tostring 格式时,中间的数字总是 4。 GUID 中的一些位(几乎在任何非 Windows 的地方都称为 UUID)是固定的,用于指示诸如版本等内容。

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

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

例如以下是完整的工作代码,不会有 4 的位置:

        var rand = new Random();
        var byteArray = new byte[16];
        rand.NextBytes(byteArray);
        var g = new Guid(byteArray);

关于c# - 关于 GUID 的 : Are they always fixed in length, 的问题,中间的数字总是 4 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3740186/

相关文章:

c# - 如何替换字符串中特定出现的字符串?

c# 在不使用调度程序的情况下访问 Task 中的 ui 元素

.net - 我可以在单元测试中使用.net线程振动器吗?

.net - 如何以编程方式重新启动 Windows 资源管理器进程

c# - Dynamics CRM 2011 - 获取 N 组 :1 related entities with QueryExpression

sql-server - 如何使用 Delphi 以 SQL Server 方式对 GUID 进行排序

c# - 相同的 GUID 可以产生不同的哈希码吗?

c# - 非线程安全单例的危险是什么?

c# - 如何防止 SQL 注入(inject)攻击?

c++ - 使用 boost serialize 的 Microsoft GUID 序列化?