sql >> Database >  >> NoSQL >> MongoDB

base64 naar gids naar base64

De volgorde van bytes in een GUID is niet hetzelfde als de volgorde in hun ToString() weergave op little-endian-systemen.

Gebruik guid.ToByteArray() in plaats van ToString().

En u moet new Guid(byte[] b) . gebruiken om het te construeren, in plaats van $str .

Om dit in pure C# uit te drukken:

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

Bekijk de "Basic Structure"-sectie van het GUID-artikel op Wikipedia voor meer details.

U zult zien dat de meeste gegevens worden opgeslagen in "Native" endianness... en dat is waar de verwarring vandaan komt.

Om te citeren:

Bewerken:

Powershell-versie:

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

Als extra waarschuwing kun je desgewenst de "==" van het einde van je tekenreeks afsnijden, omdat het slechts opvulling is (wat kan helpen als je ruimte probeert te besparen).



  1. Mongodb-service start niet

  2. Hoe php7 te verbinden met mongoDB

  3. Gegevens importeren naar MongoDB vanuit JSON-bestand met Java

  4. Laravel 4:Klasse 'MongoClient' niet gevonden