在C#中从base64字符串转换为long

Dan*_*lba 3 .net c# string base64 md5

嗨我有一些使用以下代码生成的字符串:

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

    return Convert.ToBase64String(hash);
}
Run Code Online (Sandbox Code Playgroud)

如何从编码的base64字符串中获取一个唯一的long,我的意思是,相反的操作,然后将其转换为long?

private long CalcLongFromHashCode(string base64Hashcode)
{
  //TODO
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

ken*_*n2k 8

你不能将base-64字符串转换为a long(如果它不适合它可能会被截断,因为long只使用8个字节)...

可以将它转换为字节数组(这是' 相反的 '操作):

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

如果您的数组包含至少8个字节,那么您可以得到您的长值:

long longValue = BitConverter.ToInt64(array, 0);
Run Code Online (Sandbox Code Playgroud)


Mar*_*een 7

首先,将字符串转换为byte [],

var array = Convert.FromBase64String(base64Hashcode);
Run Code Online (Sandbox Code Playgroud)

然后将字节数组转换为long

var longValue = BitConverter.ToInt64(array, 0);
Run Code Online (Sandbox Code Playgroud)

如前所述,你会被截断.


相反的方向:

var bits = BitConverter.GetBytes(@long);
var base64 = Convert.ToBase64String(bits);
Run Code Online (Sandbox Code Playgroud)

例子:

218433070285205504 : "ADCMWbgHCAM="
long.MaxValue : "/////////38="
Run Code Online (Sandbox Code Playgroud)