MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

base64 per guidare a base64

L'ordine dei byte in un GUID non è lo stesso dell'ordine nel loro ToString() rappresentazione su sistemi little-endian.

Dovresti usare guid.ToByteArray() invece di usare ToString().

E dovresti usare new Guid(byte[] b) per costruirlo, invece di $str .

Per esprimerlo in puro 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.
}

Dai un'occhiata alla sezione "Struttura di base" dell'articolo GUID su Wikipedia per maggiori dettagli.

Vedrai che la maggior parte dei dati è archiviata in endianness "nativo"... da qui viene la confusione.

Per citare:

Modifica:

Versione Powershell:

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

Come ulteriore avvertimento, puoi facoltativamente tagliare il "==" fuori dall'estremità della tua stringa, poiché è solo un riempimento (che può aiutare se stai cercando di risparmiare spazio).