首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#将整型缩短为区分大小写的代码

c#将整型缩短为区分大小写的代码
EN

Stack Overflow用户
提问于 2012-01-17 03:59:29
回答 4查看 987关注 0票数 4

字母表中有26个字符(abc..yz)和10个数字(0..9)。这给了我们一个62个字符的词典,如果我们区分大小写的话。

目前,我们正在根据数据库中的ID构建文件名的一部分。这些数字可能会变得很长,所以我们想缩短它们。例如,不是拥有:

代码语言:javascript
复制
file_459123.exe

我们宁可:

代码语言:javascript
复制
file_aB5.exe

有没有人在C#中有一个方法可以将一个整数转换成一个更短的区分大小写的字符串,然后再将一个区分大小写的字符串转换回一个整数?

示例(不一定是这个模式):

代码语言:javascript
复制
1 = 1
2 = 2
...
9 = 9
10 = a
11 = b
...
36 = z
37 = A
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-17 04:57:39

只是将M4Ns解决方案扩展为泛型类...

代码语言:javascript
复制
  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));
        }
    }

然后你就可以...

代码语言:javascript
复制
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));
票数 6
EN

Stack Overflow用户

发布于 2012-01-17 04:16:31

尽管有Base64引用,但这里有一个通用(非优化)解决方案:

代码语言:javascript
复制
// 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"
票数 8
EN

Stack Overflow用户

发布于 2012-01-17 04:02:41

试试Base64

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8885582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档