gpt4 book ai didi

vb.net - 将 GUID 转换为数字等效项

转载 作者:行者123 更新时间:2023-12-03 20:21:41 24 4
gpt4 key购买 nike

我被要求从 ActiveDirectory 导出用户列表,并将 GUID 转换为等效的数字以进行显示(所以我会在之后使用 .ToString)。我已经进行了一些搜索,但大多数问题都是关于将某些内容转换为 GUID,或将 GUID 转换为 Int 或一些愚蠢的内容(我知道 Int 太小等等),这并不合适。

我对 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 格式输出它,以便另一个团队提取并导入到另一个系统中,这可能是他们想要数字而不是字母数字格式的原因。

解决方案:

由于不需要将数字 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

最佳答案

“数字”在 VB w.r.t Guid 中没有意义。 .net 中没有 128 位数字类型。唯一的 128 位类型是 Decimal;但是将 Guid 转换为 Decimal 似乎没有意义。我会简单地使用 ToByteArray 并将字节值显示为十六进制。

或者,确保提供给 BigInteger 的数组中的最后一个字节为零以获得正值。例如。::

var bytes = Guid.NewGuid().ToByteArray(); 
Array.Resize(ref bytes, 17);
var bigInt = new BigInteger(bytes);
var value = bigInt.ToString();

关于vb.net - 将 GUID 转换为数字等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11849509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com