首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板