将byte []或object转换为GUID

时间:2012-06-02 12:04:28

标签: c# active-directory guid

我为对象数据类型分配了一些值,例如

object objData =dc.GetDirectoryEntry().Properties["objectGUID"].Value;

此对象重新调整值{byte[16]} [0]: 145 [1]: 104 [2]: 117 [3]: 139 [4]: 124 [5]: 15 [6]: 255 [7]: 68 [8]: 142 [9]: 159 [10]: 208 [11]: 102 [12]: 148 [13]: 157 [14]: 179 [15]: 75

然后我将此对象转换为byte [],如

byte[] binaryData = objData as byte[];

它也会像  {byte[16]} [0]: 145 [1]: 104 [2]: 117 [3]: 139 [4]: 124 [5]: 15 [6]: 255 [7]: 68 [8]: 142 [9]: 159 [10]: 208 [11]: 102 [12]: 148 [13]: 157 [14]: 179 [15]: 75

然后我从byte []转换十六进制值,如

string strHex = BitConverter.ToString(binaryData);

它将像**91-68-75-8B-7C-0F-FF-44-8E-9F-D0-66-94-9D-B3-4B**一样返回.. 但我需要像GUID格式的输出,我怎样才能实现这个目标?

5 个答案:

答案 0 :(得分:48)

如何使用Guid constructor which takes a byte array

Guid guid = new Guid(binaryData);

(如果需要,您可以使用Guid.ToString()以文本形式获取它。)

答案 1 :(得分:2)

长格式为(enter link description here):

public static string ConvertGuidToOctectString(string objectGuid)
{
    System.Guid guid = new Guid(objectGuid);
    byte[] byteGuid = guid.ToByteArray();
    string queryGuid = "";
    foreach (byte b in byteGuid)
    {
        queryGuid += @"\" + b.ToString("x2");
    }
    return queryGuid;
}

答案 2 :(得分:2)

byte[] binaryData = objData as byte[];
string strHex = BitConverter.ToString(binaryData);
Guid id = new Guid(strHex.Replace("-", ""))

答案 3 :(得分:0)

System.DirectoryServices.DirectoryEntry类具有用于此目的的属性Guid - 无需通过Properties访问objectGUID属性。

答案 4 :(得分:0)

尽管上面建议的手动转换有效,但有一种方法可以自动执行。

  1. 您可以使用官方的SQLite提供程序,而不是Microsoft的提供程序。使用其SQLiteConnectionStringBuilder来配置一个将Guid理解为Guid的连接:
var builder = new SQLiteConnectionStringBuilder("Data Source=./mydatabase.db") { BinaryGUID = true };
var connStr = builder.ToString();
return new SQLiteConnection(connStr);

这是官方的SQLite提供程序:https://www.nuget.org/packages/System.Data.SQLite.Core/

  1. 如果使用Dapper,则可以使用此类自动将字节数组转换为Guid,该类应在应用启动后立即注册一次:
public class GuidTypeHandler : SqlMapper.TypeHandler<Guid>
{
    public override Guid Parse(object value)
    {
        var valueAsBytes = (byte[])value;
        return new Guid(valueAsBytes);
    }

    public override void SetValue(System.Data.IDbDataParameter parameter, Guid value)
    {
        var guidAsBytes = value.ToByteArray();
        parameter.Value = guidAsBytes;
    }
}

// And the registration in Startup.cs or equivalent:
SqlMapper.AddTypeHandler<Guid>(new GuidTypeHandler());

来源:Dapper Issue #718 - GitHub