MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

base64, um zu base64 zu führen

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).