C#将Active Directory十六进制转换为GUID

C#将Active Directory十六进制转换为GUID,c#,powershell,active-directory,data-conversion,C#,Powershell,Active Directory,Data Conversion,我们正在将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 GUI

我们正在将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
更新

在接受答案后,我可以使用微软的一些代码来验证它

使用系统;
名称空间控制台AP3
{
班级计划
{
静态void Main()
{
// https://stackoverflow.com/questions/56638890/c-sharp-convert-active-directory-hexadecimal-to-guid
字节[]bytearray=StringToByteArray(“ec147017fdff0d40bc0371a8c5d9e302”);
// https://docs.microsoft.com/en-us/dotnet/api/system.guid.tobytearray?view=netframework-4.8
Guid=新的Guid(字节数组);
WriteLine(“Guid:{0}”,Guid);
Byte[]bytes=guid.ToByteArray();
foreach(以字节为单位的变量byt)
Console.Write(“{0:X2}”,byt);
Console.WriteLine();
Guid guid2=新的Guid(字节);
WriteLine(“Guid:{0}(与第一个Guid:{1}相同)”,guid2,guid2.Equals(Guid));
Console.ReadLine();
}
公共静态字节[]StringToByteArray(字符串十六进制)
{
int numbercars=十六进制长度;
字节[]字节=新字节[numbercars/2];
对于(int i=0;i

您可以将十六进制
字符串
转换为字节数组,并使用该数组构造新的
Guid

如果您需要知道如何将十六进制字符串转换为字节数组

根据该问题的公认答案:

公共静态字节[]StringToByteArray(字符串十六进制)
{
int numbercars=十六进制长度;
字节[]字节=新字节[numbercars/2];
对于(int i=0;i
@PatrickArtner我注意到了。起初我认为是用于输出数据的工具对objectGUID进行了置乱,或者是其他东西,字符恰好匹配。但是,没有,我可以通过PowerShell和ADUC确认输出。当我在属性编辑器中打开objectGUID时,十六进制数组实际上就是所显示的。这是错的吗?
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;
        }
    }
}