C # Конвертировать шестнадцатеричный Active Directory в GUID - PullRequest
2 голосов
/ 18 июня 2019

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

Возможно ли преобразовать шестнадцатеричное число обратно в формат GUID? По всей вероятности, шестнадцатеричный код вернется в строковом формате.

Пример:

Hexadecimal: EC 14 70 17 FD FF 0D 40 BC 03 71 A8 C5 D9 E3 02
or
Hexadecimal (string): ec147017fdff0d40bc0371a8c5d9e302

GUID: 177014EC-FFFD-400D-BC03-71A8C5D9E302

Обновление

После принятия ответа я могу проверить его, используя некоторый код от Microsoft См. Здесь: метод Guid.ToByteArray

using System;

namespace ConsoleApp3
{
    class Program
    {
        static void Main()
        {
            // https://stackoverflow.com/questions/56638890/c-sharp-convert-active-directory-hexadecimal-to-guid
            byte[] bytearray = StringToByteArray("ec147017fdff0d40bc0371a8c5d9e302");

            // https://docs.microsoft.com/en-us/dotnet/api/system.guid.tobytearray?view=netframework-4.8
            Guid guid = new Guid(bytearray);
            Console.WriteLine("Guid: {0}", guid);
            Byte[] bytes = guid.ToByteArray();
            foreach (var byt in bytes)
                Console.Write("{0:X2} ", byt);

            Console.WriteLine();
            Guid guid2 = new Guid(bytes);
            Console.WriteLine("Guid: {0} (Same as First Guid: {1})", guid2, guid2.Equals(guid));
            Console.ReadLine();

        }

        public static byte[] StringToByteArray(String hex)
        {
            int NumberChars = hex.Length;
            byte[] bytes = new byte[NumberChars / 2];
            for (int i = 0; i < NumberChars; i += 2)
                bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
            return bytes;
        }
    }

1 Ответ

1 голос
/ 18 июня 2019

У Guid есть конструктор, который принимает байтовый массив

Вы можете преобразовать шестнадцатеричный string в байтовый массив и использовать его для создания нового Guid.

Если вам нужно знать, как преобразовать шестнадцатеричную строку в байтовый массив, Переполнение стека уже имеет несколько ответов на этот вопрос .

Из принятого ответа на этот вопрос:

public static byte[] StringToByteArray(String hex)
{
  int NumberChars = hex.Length;
  byte[] bytes = new byte[NumberChars / 2];
  for (int i = 0; i < NumberChars; i += 2)
    bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
  return bytes;
}
...