将GUID转换为数字等效

时间:2012-08-07 15:45:30

标签: vb.net .net-4.0 type-conversion guid

我被要求从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格式输出此内容,让另一个团队拿起并导入到另一个系统中,这可能就是为什么他们想要数字而不是比字母数字格式。

SOLUTION:

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

2 个答案:

答案 0 :(得分:1)

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

或者,确保给予BigInteger的数组中的最后一个字节为零以获得正值。 e.g。::

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

答案 1 :(得分:0)

你可以使用ToString(" n")简单地将Guid转换为数字表示:

Guid.NewGuid().ToString("n")

将返回类似" 5ee575bd995b419499aff6d6967c4a35"