GUIDのバイトの順序は、ToString()
の順序と同じではありません。 リトルエンディアンシステムでの表現。
ToString()を使用するのではなく、guid.ToByteArray()を使用する必要があります。
また、new Guid(byte[] b)
を使用する必要があります $str
ではなく、それを構築する 。
これを純粋なC#で表現するには:
public string GuidToBase64(Guid guid)
{
return System.Convert.ToBase64String(guid.ToByteArray()); // Very similar to what you have.
}
public Guid Base64Toguid(string base64)
{
var bytes = System.Convert.FromBase64String(base64);
return new Guid(bytes); // Not that I'm not building up a string to represent the GUID.
}
GUID記事の
ほとんどのデータが「ネイティブ」エンディアンに格納されていることがわかります...これが混乱の原因です。
引用するには:
編集:
Powershellバージョン:
function base64toguid
{
param($str);
$b = [System.Convert]::FromBase64String($str);
$g = new-object -TypeName System.Guid -ArgumentList (,$b);
return $g;
}
追加の注意事項として、オプションで文字列の末尾から「==」を削除できます。これは単なるパディングであるためです(スペースを節約しようとしている場合に役立ちます)。