Urutan byte dalam GUID tidak sama dengan urutan ToString()
mereka representasi pada sistem little-endian.
Anda harus menggunakan guid.ToByteArray() daripada menggunakan ToString().
Dan, Anda harus menggunakan new Guid(byte[] b)
untuk membangunnya, daripada $str
.
Untuk mengekspresikan ini dalam C# murni:
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.
}
Lihat "Struktur Dasar" dari artikel GUID di Wikipedia untuk detail lebih lanjut.
Anda akan melihat bahwa sebagian besar data disimpan dalam endianness "Asli"... dari sanalah kebingungan itu berasal.
Mengutip:
Sunting:
Versi Powershell:
function base64toguid
{
param($str);
$b = [System.Convert]::FromBase64String($str);
$g = new-object -TypeName System.Guid -ArgumentList (,$b);
return $g;
}
Sebagai peringatan tambahan, Anda dapat secara opsional memangkas "==" dari ujung string Anda, karena itu hanya pengisi (yang mungkin membantu jika Anda mencoba menghemat ruang).