我被要求从 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 格式输出,以便另一个团队获取并导入另一个系统,这可能是他们希望它以数字而不是字母数字格式的原因。
解决方案:
由于无需将 Numeric 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