当前位置:  开发笔记 > 编程语言 > 正文

为什么.NET GUID中有破折号?

如何解决《为什么.NETGUID中有破折号?》经验,为你挑选了6个好方法。

为什么.NET GUID中有破折号?在GUID的大多数实现中是否存在破折号,或者它只是Microsoft的东西?

签,

741ecf77-9c92-4435-8e6b-85975bd13452



1> casperOne..:

从技术上讲,GUID中没有"破折号" .GUID是128位值,通常以下列方式存储(使用C#表示结构):

public struct Guid
{
  public ulong Data1;
  public ushort Data2;
  public ushort Data3;
  public fixed byte Data4[8];
}

破折号位于GUID 的字符串表示中.

短划线是可选的,在GUID的字符串表示中不是必需的.

也就是说,历史原因是破折号的位置与GUID的生成方式有关,但历史语义不再适用.


这完全是完全错误的,在GUID的连字符ASCII十六进制表示中有5个带连字符的元素,包含二进制GUID元素的结构只有4个元素长.此外,历史语义肯定仍然适用,特别是在这个问题中,考虑到历史是首先出现连字符的确切原因.
@joshperry你从答案中重申了我的观点.一个`Guid`只有128个字节,周期.分隔符来自*表示*.此外,关于在*表示*中应用的历史语义,它们不是.正如你所说,这是出于历史原因.这些历史原因不再适用.从您的回答中,"这些数据元素不再具有任何特定含义."

2> joshperry..:

在UUID(通用唯一标识符)规范的初始版本中,每个数据元素都具有语义含义:

{ time_low } - { time_mid } - { time_high_and_version } - {  clock_seq_and_reserved clock_seq_low } - { node_id }

这些元素旨在提供时间(时间位)和空间(主机位)唯一性.

版本历史

由于发现2 ^ 1024个随机位的密钥空间中的冲突的数学概率在天文学上是不可能的,因此出于安全和隐私的原因,UUID规范的后续版本已经淘汰了时间和主机数据.

唯一保留任何含义的元素是版本位和保留位.

版本3 UUID源自URI或其他可分辨名称的MD5哈希.

版本4是使用随机数据生成的,目前是您在野外看到的最常见的实现.

版本5源自SHA1哈希.

存储格式

由于为RFC中的UUID的ASCII格式指定了连字符,即使各个部分不再保留其原始含义,如果您需要互操作性,仍然需要它们.

UUID有时也存储为base64或ascii85编码的字符串,以节省通过非二进制安全的传输进行传输的空间,并且不需要遵守RFC.

Ascii:   3F2504E0-4F89-11D3-9A0C-0305E82C3301
Base64:  7QDBkvCA1+B9K/U0vrQx1A
Ascii85: 5:$Hj:Pf\4RLB9%kU\Lj

参考文献:
RFC4122(有关UUID格式的ABNF描述,请参阅第3页)
Wikipedia GUID UUID



3> 小智..:

连字符表示Guid的字节结构.

typedef struct _GUID 
{  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];
} GUID;

对于:

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)

您可以在保存之前剥离它们.至少在.NET中,Guid类型的构造函数将从其字符串表示初始化Guid变量,无论连字符是否仍然存在或被删除.



4> Nissim..:

你可以用各种格式获取你的指南.

假设你正在使用c#:

Guid guid = Guid.NewGuid();

Console.WriteLine(guid.ToString("N"))

63be6f7e4e564f0580229f958f492077

Console.WriteLine(guid.ToString("D"))

63be6f7e-4e56-4f05-8022-9f958f492077

Console.WriteLine(guid.ToString("B"))

{63be6f7e-4e56-4f05-8022-9f958f492077}

Console.WriteLine(guid.ToString("P"))

(63be6f7e-4e56-4f05-8022-9f958f492077)



5> Otávio Décio..:

这只是一个方便.

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



6> Andrew Hare..:

这是分块的一个例子,就像电话号码,信用卡号码等.

这是关于它的一篇很好的维基百科文章.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有