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