Алгоритм получения номера ushort из GUID c # - PullRequest
0 голосов
/ 29 ноября 2018

Как получить уникальное (в большинстве случаев) ushort число из GUID, я попробовал приведенный ниже код, но, поскольку я конвертирую его в ushort, он просто игнорирует шестнадцатеричные значения LSB GUID

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

К вашему сведению: где-то в моем коде у меня есть подсказка, и я хочу сохранить соответствующий номер ushort.

1 Ответ

0 голосов
/ 29 ноября 2018

Я попробовал приведенный ниже код, но поскольку я конвертирую его в ushort, поэтому он просто игнорирует шестнадцатеричные значения LSB GUID

Да, это правильно и по уважительной причине выне может хранить 128 бит данных в 16 бит данных.

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);

Примечание что вы естьделать это очень подозрительно, и я действительно думаю, что вам нужно переосмыслить свой дизайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...