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中文網其他相關文章!