6

ActiveDirectoryからユーザーのリストをエクスポートし、GUIDを表示用の同等の数値に変換するように求められました(そのため、後で.ToStringを実行します)。私はいくつかの検索を行いましたが、ほとんどの質問は、何かをGUIDに変換するか、GUIDをIntまたは何かばかげたものに変換することです(Intが小さすぎるなど)。これは実際には適切ではありません。

ADのものを並べ替えてデータをエクスポートしましたが、GUIDを変換するために使用するデータ型/形式、およびそれが可能かどうか疑問に思っています。数値がまだ「一意」である限り、正確な数値タイプがどのように使用されているかはあまり気になりません(GUIDが実際には一意ではないことなどを理解しています)。

GUIDは16進数ベースの形式ですか、表示用に変換できる適切な数値タイプはありますか?

私はVB.Netと.NetFramework4を使用しています。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
4

2 に答える 2

1

「数値」はVB wrtでは意味がありませんGuid。.net には 128 ビットの数値型はありません。128 ビットの型は Decimal のみです。Guidしかし、 aを aに変換するのは意味がないようですDecimalToByteArrayバイト値を16進数として使用して表示するだけです。

または、BigInteger に指定された配列の最後のバイトがゼロであることを確認して、正の値を取得します。例えば::

var bytes = Guid.NewGuid().ToByteArray(); 
Array.Resize(ref bytes, 17); 
var bigInt = new BigInteger(bytes);
var value = bigInt.ToString();
于 2012-08-07T15:51:20.033 に答える