从GUID C#获取ushort编号的算法

时间:2018-11-29 11:55:28

标签: c# uniqueidentifier

如何从ushort获取唯一的(大部分时间)GUID数字,我尝试了下面的代码,但是由于我将其转换为ushort,所以它只是忽略了LSB的LSB十六进制值GUID

static ushort GetId() {
            Guid guid = Guid.NewGuid();
            byte[] buffer = guid.ToByteArray();
            return BitConverter.ToUInt16(buffer, 0);
}

仅供参考:在我的代码中的某个地方,我有一个向导,我想保留相应的ushort号码。

1 个答案:

答案 0 :(得分:0)

  

我尝试了下面的代码,但由于我将其转换为ushort,所以它   只是忽略了GUID的LSB十六进制值

是的,这是正确的,并且有充分的理由,您不能在16位数据中存储128位数据。

Name                    Length (bytes)  Contents
---------------------------------------------------------------------------------------
time_low                            4   integer giving the low 32 bits of the time
time_mid                            2   integer giving the middle 16 bits of the time
time_hi_and_version                 2   4-bit "version" in the most significant bits, followed by the high 12 bits of the time
clock_seq_hi_and_res clock_seq_low  2   1-3 bit "variant" in the most significant bits, followed by the 13-15 bit clock sequence
node                                6   the 48-bit node id

如果您想要最后16位(2个字节,4个十六进制值),只需反转数组

Array.Reverse(buffer, 0, buffer.Length);
return BitConverter.ToUInt16(buffer, 0);

注意 您正在做的事情非常令人怀疑,我真的认为您需要重新考虑您的设计