sql >> Databasteknik >  >> NoSQL >> MongoDB

base64 till vägledning till base64

Ordningen på bytes i en GUID är inte densamma som ordningen i deras ToString() representation på små-endian-system.

Du bör använda guid.ToByteArray() istället för att använda ToString().

Och du bör använda new Guid(byte[] b) för att konstruera den, snarare än $str .

För att uttrycka detta i ren 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.
}

Ta en titt på "Basic Structure"-avsnittet i GUID-artikeln på Wikipedia för mer information.

Du kommer att se att det mesta av data lagras i "native" endianness... vilket är varifrån förvirringen kommer.

För att citera:

Redigera:

Powershell-version:

function base64toguid  
{  
    param($str);  
    $b = [System.Convert]::FromBase64String($str);
    $g = new-object -TypeName System.Guid -ArgumentList (,$b);
    return $g;
}

Som en extra varning kan du valfritt trimma "==" av änden av din sträng, eftersom det bara är utfyllnad (vilket kan hjälpa om du försöker spara utrymme).



  1. MongoDB - förmörkelse

  2. Fatalt fel - "Mongo"-klassen hittades inte

  3. Ringa funktion inuti mongodbs aggregat?

  4. Hur man implementerar multitenancy för redis in spring boot