Преобразовать GUID в числовой эквивалент

Меня попросили экспортировать список пользователей из ActiveDirectory и преобразовать GUID в числовой эквивалент для отображения (поэтому я добавлю.ToString, что после). Я провел некоторый поиск, но большинство вопросов касаются преобразования чего-либо в GUID или преобразования GUID в Int или чего-то глупого (я понимаю, что Ints слишком малы и т. Д.), Что не совсем подходит.

Я отсортировал содержимое AD и экспортировал данные, однако мне интересно, какой тип / формат данных использовать для преобразования идентификаторов GUID, и если это вообще возможно. Меня не особо беспокоит, какой именно числовой тип используется, пока число все еще "уникально" (я понимаю, что GUID на самом деле не уникален и т. Д.).

Находятся ли GUID в шестнадцатеричном формате, и есть ли подходящий числовой тип, в который я могу преобразовать их для отображения?

Я использую VB.Net и.Net Framework 4. Я пытался использовать BigInteger, но, похоже, это тоже касается отрицательных чисел, которые я буду использовать, если придется, но не буду, если есть что-то более подходящее,

Редактировать Вот что я пытался:

Используя GUID: f02c7caf-7e5a-491b-9f23-9476174bdda1

И этот код:

Dim Foo As String = (New System.Numerics.BigInteger(adUserDirectoryRecord.Guid.ToByteArray())).ToString

Вышло так: -125127638954164478915246035839554388817

Примечание: я буду выводить это в формате.csv, как только я закончу, для другой команды, чтобы забрать и импортировать в другую систему, вероятно, поэтому они хотят это в числовом, а не буквенно-цифровом формате.

РЕШЕНИЕ:

Поскольку больше не нужно будет преобразовывать числовой GUID обратно, BigInteger был правильным методом для этого. Изменение состояло в том, чтобы изменить размер ByteArray, чтобы заставить его использовать только положительные значения:

'Gets the User's GUID from the Active Directory record, converts it to a Byte Array and Resizes it to Force Positive Values Only:
Dim bytGUIDBytes As Byte() = adUserDirectoryRecord.Guid.ToByteArray()
Array.Resize(bytGUIDBytes, 17)

'Converts the User's GUID Bytes into a Numeric Equivalent, and Returns the String version of the Numerical value.
Return New System.Numerics.BigInteger(bytGUIDBytes).ToString

2 ответа

Решение

"Числовой" не имеет смысла в VB относительно Guid, В.net нет 128-битных числовых типов. Единственный 128-битный тип - Десятичный; но это не имеет смысла конвертировать Guid к Decimal, Я бы просто использовал ToByteArray и отобразить значения байтов в шестнадцатеричном виде.

В качестве альтернативы, убедитесь, что последний байт в массиве, данный BigInteger, равен нулю, чтобы получить положительное значение. например::

var bytes = Guid.NewGuid().ToByteArray(); 
Array.Resize(ref bytes, 17); 
var bigInt = new BigInteger(bytes);
var value = bigInt.ToString();

Вы можете просто преобразовать Guid в числовое представление, используя ToString("n"):

Guid.NewGuid().ToString("n")

вернет что-то вроде "5ee575bd995b419499aff6d6967c4a35"

Другие вопросы по тегам