Преобразование из строки base64 в long в C # - PullRequest
3 голосов
/ 08 февраля 2012

Привет, у меня есть несколько строк, сгенерированных с использованием следующего кода:

private static string CalcHashCode(byte[] data)
{
    MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
    Byte[] hash = md5Provider.ComputeHash(data);

    return Convert.ToBase64String(hash);
}

Как я могу получить уникальную long из закодированной строки base64, я имею в виду противоположную операцию, а затем преобразовать ее в long?

private long CalcLongFromHashCode(string base64Hashcode)
{
  //TODO
}

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 08 февраля 2012

Нельзя преобразовать строку base-64 в long (или она может быть усечена, если она не помещается, так как long использует только 8 байтов) ...

Этоможно преобразовать его в байтовый массив (что является « противоположной » операцией):

 byte[] hash = new byte[] { 65, 66, 67, 68, 69 };
 string string64 = Convert.ToBase64String(hash);
 byte[] array = Convert.FromBase64String(string64);

Если ваш массив содержит не менее 8 байтов, вы можете получить длинное значение:

long longValue = BitConverter.ToInt64(array, 0);
7 голосов
/ 08 февраля 2012

Сначала преобразуем строку в байт [],

var array = Convert.FromBase64String(base64Hashcode);

затем преобразуйте байтовый массив в длинный

var longValue = BitConverter.ToInt64(array, 0);

Как уже упоминалось, вы получите усечение.


Противоположное направление:

var bits = BitConverter.GetBytes(@long);
var base64 = Convert.ToBase64String(bits);

Примеры:

218433070285205504 : "ADCMWbgHCAM="
long.MaxValue : "/////////38="
...