Die Reihenfolge der Bytes in einer GUID stimmt nicht mit der Reihenfolge in ihrem ToString()
überein Darstellung auf Little-Endian-Systemen.
Sie sollten guid.ToByteArray() statt ToString() verwenden.
Und Sie sollten new Guid(byte[] b)
verwenden um es zu konstruieren, anstatt $str
.
Um dies in reinem C# auszudrücken:
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.
}
Sehen Sie sich den Abschnitt "Basic Structure" des GUID-Artikels an auf Wikipedia für weitere Details.
Sie werden sehen, dass die meisten Daten in "nativer" Endianness gespeichert sind ... daher kommt die Verwirrung.
Zitat:
Bearbeiten:
Powershell-Version:
function base64toguid
{
param($str);
$b = [System.Convert]::FromBase64String($str);
$g = new-object -TypeName System.Guid -ArgumentList (,$b);
return $g;
}
Als zusätzlichen Vorbehalt können Sie optional das "==" am Ende Ihrer Zeichenfolge abschneiden, da es nur eine Auffüllung ist (was hilfreich sein kann, wenn Sie versuchen, Platz zu sparen).