将byte []或object转换为GUID

Man*_*aju 19 c# guid active-directory

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

object objData =dc.GetDirectoryEntry().Properties["objectGUID"].Value;
Run Code Online (Sandbox Code Playgroud)

这个对象重新调整了值 {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[];
Run Code Online (Sandbox Code Playgroud)

它也会像, {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);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 53

如何使用Guid带字节数组构造函数

Guid guid = new Guid(binaryData);
Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是,Guid(byte[]) 生成修改后的 GUID,而不是数组的精确十六进制表示形式。例如,对于以下字节数组 [27,131,88,183,70,167,69,138,185,73,226,160,62,193,49,52],它生成“ b758831b-a746-8a45-b949-e2a03ec13134”,而它应该生成“ 1b8358b7-46a7- 458a-b949 -e2a03ec13134”(27 == 0x1b、131 == 0x83 等)。Guid(string) 的工作方式有所不同。如果您传递“1b8358b746a7458ab949e2a03ec13134”,它将使用字符串“as is”并生成“1b8358b7-46a7-458a-b949-e2a03ec13134”。 (3认同)
  • @ManikandanSethuraju:你应该直接转换,例如`new Guid((byte[]) objData)` (2认同)

小智 7

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