MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

base64 para guiar para base64


A ordem dos bytes em um GUID não é a mesma que a ordem em seu ToString() representação em sistemas little-endian.

Você deve usar guid.ToByteArray() em vez de usar ToString().

E, você deve usar new Guid(byte[] b) para construí-lo, em vez de $str .

Para expressar isso em C# puro:
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.
}

Dê uma olhada na seção "Estrutura básica" do artigo GUID na Wikipédia para mais detalhes.

Você verá que a maioria dos dados é armazenada em "Native" endianness... que é de onde vem a confusão.

Citar:


Editar:


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

Como uma advertência adicional, você pode, opcionalmente, cortar o "==" do final da sua string, já que é apenas um preenchimento (o que pode ajudar se você estiver tentando economizar espaço).