有没有办法区分 GUID 和随机数?

6

当调试模糊代码缺陷时,能够区分GUID和随机数据是有用的。

在Windows上,每个生成的GUID都是版本4,因此它的第三部分的前半字节为“4”。因此,如果16字节序列违反了该规则,则不是版本4 GUID。例如,

567E1ECB-EA1C-42D3-A3ED-87A5D824D167

这可以是版本4 GUID,也可以是其他任何内容,但是

567E1ECB-EA1C-02D3-A3ED-87A5D824D167 //third section starts with 0, not with 4

不是版本4的GUID。

其他16字节内存块是或不是有效GUID的标志是什么?

2个回答

1

2
在一个16字节的存储块中,你只有字节,没有字符,在它的十六进制表示(32个半字节)中,根据定义你没有任何字符。 - MSalters

0
除了GUID版本(0100)之外,还有一种称为GUID变体的东西。这将是第8个八位字节中的2位(10)。剩余的位数在v4 GUID中根据定义是随机的。

你的意思是每个GUID中第8个八位字节的前两位必须是“10”吗? - sharptooth
实际上,变量是八位字节的三个最高有效位 - 可以是 000010110111。标准值为 010,对于以相同方式生成的 GUID,这些位将始终具有相同的值。 - configurator
@configurator 不对,完全不是这样的。Variant 只能是以下之一:0*、10、110、111。在此情况下,* 表示该位可以是任何值。 - osexpert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接