GUID 类型
GUIDglobally unique identifier(全球唯一标识符)
它通过一种复杂的算法生成,保证世界上任何两台计算机都不会生成重复的 GUID 值。
GUID主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。
在 Windows 平台上,GUID应用非常广泛,比如:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。
GUID 类型定义:
#if defined(__midl)
typedef struct {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
byte Data4[ 8 ];
} GUID;
#else
typedef struct _GUID{
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
#endif
示例:
GUID43ad2ba0_2471_4610_86ac_5e8e8836cc87 = { 1135422368u, 9329u, 17936u, { 134u,172u, 94u, 142u, 136u, 54u, 204u, 135u } };
从 GUID 类型的定义上看,分成四个部分,但是,从具体的示例看,用四个线进行分隔好像应该是五个部分。那么,到底是怎么加速呢?
毫无疑问,类型定义肯定是准确的。那么就要看看它们到底是如何对应的?
看示例,等号前面,是我们可以看到的表现形式,用四个下划线分隔,有五个部分,每一部分都是 16 进制数;等号后面是真正存储的数据,以逗号分隔,是四个部分,第四部分又由 8 个部分组成,每一部分都是无符号的10 进制数。
计算一下,就可以知道:
16 进制 43ad2ba0 是等于 10 进制 1135422368u,同理,后面两个也是如此。
第四和第五部分合在一起,看作一个部分,是 16 位 16 进制数,其中,每两位一组,构成一个无符号的整数。
| 16 进制数 | 10 进制数 |
1 | 43ad2ba0 | 1135422368u |
2 | 2471 | 9329u |
3 | 4610 | 17936u |
4.1 | 86 | 134u |
4.2 | ac | 172u |
4.3 | 5e | 94u |
4.4 | 8e | 142u |
4.5 | 88 | 136u |
4.6 | 36 | 54u |
4.7 | Cc | 204u |
4.8 | 87 | 135u |
在 System.Guid 命名空间下有一个 NewGuid() 函数,可以生成 GUID 值。
比如,在 PowerShell 下输入:
[System.guid]::NewGuid()
就得到一个 GUID 值:
Guid
----
43ad2ba0_2471_4610_86ac_5e8e8836cc87