Преобразовать 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"