字母表中有26个字符(abc..yz)和10个数字(0..9)。这给了我们一个62个字符的词典,如果我们区分大小写的话。
目前,我们正在根据数据库中的ID构建文件名的一部分。这些数字可能会变得很长,所以我们想缩短它们。例如,不是拥有:
file_459123.exe我们宁可:
file_aB5.exe有没有人在C#中有一个方法可以将一个整数转换成一个更短的区分大小写的字符串,然后再将一个区分大小写的字符串转换回一个整数?
示例(不一定是这个模式):
1 = 1
2 = 2
...
9 = 9
10 = a
11 = b
...
36 = z
37 = A发布于 2012-01-17 04:57:39
只是将M4Ns解决方案扩展为泛型类...
public class BaseX
{
private readonly string _digits;
public BaseX(string digits)
{
_digits = digits;
}
public string ToBaseX(int number)
{
var output = "";
do
{
output = _digits[number % _digits.Length] + output;
number = number / _digits.Length;
}
while (number > 0);
return output;
}
public int FromBaseX(string number)
{
return number.Aggregate(0, (a, c) => a*_digits.Length + _digits.IndexOf(c));
}
}然后你就可以...
var x = new BaseX("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
Console.WriteLine(x.ToBaseX(10));
Console.WriteLine(x.ToBaseX(459123));
Console.WriteLine(x.ToBaseX(63));
Console.WriteLine(x.FromBaseX("1Vrd"));
Console.WriteLine(x.FromBaseX("A"));
var bin = new BaseX("01");
Console.WriteLine(bin.ToBaseX(10));发布于 2012-01-17 04:16:31
尽管有Base64引用,但这里有一个通用(非优化)解决方案:
// for decimal to hexadecimal conversion use this:
//var digits = "0123456789abcdef".ToCharArray();
var digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
.ToCharArray();
int number = 459123;
string output = "";
do
{
var digit = digits[(int)(number%digits.Length)];
output = output.Insert(0, digit.ToString());
number = (int)number/digits.Length;
}
while (number > 0);
// output is now "1Vrd"发布于 2012-01-17 04:02:41
试试Base64
https://stackoverflow.com/questions/8885582
复制相似问题