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

Debugging 有没有办法区分GUID和随机数?,debugging,random,guid,undefined-behavior,Debugging,Random,Guid,Undefined Behavior,在调试模糊的代码缺陷时,能够区分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和随机数据非常有用

在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的其他标志是什么?

GUID是十六进制的,因此您可以检查包含哪些字符(即“X”、“Y”等无效)

查看维基百科的定义,你可能会在那里找到更多的想法


除了GUID版本(0100),还有一种称为GUID变量的东西。这将是8位字节中的2位(10)。v4 GUID的剩余位根据定义是随机的

在一个16字节的内存块中,您只有字节,没有字符,而在其十六进制表示法(32个半字节)的定义中,您没有这些。您的意思是在每个GUID中,八位字节8的前2位必须是“10”吗?实际上,变量是八位字节8的三个最高有效位,可以是
000
010
110
111
。标准的是
010
,但是对于以相同方式生成的guid,这些位将始终具有相同的值。