栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将以10为底的数字转换为.NET中任何基的最快方法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将以10为底的数字转换为.NET中任何基的最快方法?

Convert.ToString

可用于将数字转换为指定基数的等效字符串表示形式。

例:

string binary = Convert.ToString(5, 2); // convert 5 to its binary representationConsole.WriteLine(binary);   // prints 101

但是,正如评论所指出的那样,

Convert.ToString
仅支持以下有限的(但通常是足够的)基础集:2、8、10或16。

更新(以满足转换为任何基数的要求):

我不知道BCL中能够将数字转换为任何基数的任何方法,因此您将必须编写自己的小型实用程序函数。一个简单的示例如下所示(请注意,通过替换字符串串联肯定可以使速度更快):

class Program{    static void Main(string[] args)    {        // convert to binary        string binary = IntToString(42, new char[] { '0', '1' });        // convert to hexadecimal        string hex = IntToString(42,  new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',   'A', 'B', 'C', 'D', 'E', 'F'});        // convert to hexavigesimal (base 26, A-Z)        string hexavigesimal = IntToString(42,  Enumerable.Range('A', 26).Select(x => (char)x).ToArray());        // convert to sexagesimal        string xx = IntToString(42,  new char[] { '0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x'});    }    public static string IntToString(int value, char[] baseChars)    {        string result = string.Empty;        int targetbase = baseChars.Length;        do        { result = baseChars[value % targetbase] + result; value = value / targetbase;        }         while (value > 0);        return result;    }    /// <summary>    /// An optimized method using an array as buffer instead of     /// string concatenation. This is faster for return values having     /// a length > 1.    /// </summary>    public static string IntToStringFast(int value, char[] baseChars)    {        // 32 is the worst cast buffer size for base 2 and int.MaxValue        int i = 32;        char[] buffer = new char[i];        int targetbase= baseChars.Length;        do        { buffer[--i] = baseChars[value % targetbase]; value = value / targetbase;        }        while (value > 0);        char[] result = new char[32 - i];        Array.Copy(buffer, i, result, 0, 32 - i);        return new string(result);    }}

更新2(性能改进)

使用数组缓冲区而不是字符串连接来构建结果字符串可以改善性能,尤其是在数量较大时(请参见方法

IntToStringFast
)。在最佳情况下(即可能的最长输入),此方法快大约三倍。但是,对于1位数字(即目标库中的1位数字),
IntToString
速度会更快。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495414.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号