首页 > 后端开发 > C++ > 如何有效地将基本10整数转换为C#中的任何基础?

如何有效地将基本10整数转换为C#中的任何基础?

Mary-Kate Olsen
发布: 2025-01-28 10:33:08
原创
427 人浏览过

How to Efficiently Convert a Base 10 Integer to Any Base in C#?

C#高效实现十进制整数到任意进制的转换

C#的Convert.ToString方法方便地将数字转换为特定进制(2、8、10和16)的字符串表示形式。但是,如果需要使用自定义字符转换为任意进制,此方法就显得力不从心了。

自定义转换进制

为了克服这个限制,我们可以创建一个自定义工具函数,例如IntToString方法:

<code class="language-csharp">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;
}</code>
登录后复制

使用数组缓冲区提升性能

对于较大的输入值,使用数组缓冲区代替字符串连接可以显着提高性能:

<code class="language-csharp">public static string IntToStringFast(int value, char[] baseChars)
{
    // 使用数组缓冲区避免字符串连接
    char[] buffer = new char[32];
    int targetBase = baseChars.Length;
    int i = 32;

    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);
}</code>
登录后复制

使用示例

<code class="language-csharp">// 转换为二进制
string binary = IntToStringFast(42, new char[] { '0', '1' });
Console.WriteLine(binary);              // 输出 101010

// 转换为十六进制
string hex = IntToStringFast(42, 
    new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                 'A', 'B', 'C', 'D', 'E', 'F'});
Console.WriteLine(hex);              // 输出 2A

// 转换为二十六进制(26进制,A-Z)
string hexavigesimal = IntToStringFast(42, 
    Enumerable.Range('A', 26).Select(x => (char)x).ToArray());
Console.WriteLine(hexavigesimal);              // 输出 FQ</code>
登录后复制

以上是如何有效地将基本10整数转换为C#中的任何基础?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板