首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 實現十進制轉二進制、八進制、十六進制算法完整代碼

     編輯:關於C語言

演算法核心:除基取餘法

通用步驟:循環除以基數,收集餘數,逆序輸出。十六進制需額外處理 10-15 → A-F 映射。

完整 WinForms 實現代碼


using System;
using System.Windows.Forms;

namespace ExDtoB
{
    public partial class Form1 : Form
    {
        public Form1() => InitializeComponent();

        // 十進制轉二進制
        public string DtoB(int d)
        {
            if (d < 2) return d.ToString();
            var bits = new System.Collections.Generic.List();
            while (d >= 2)
            {
                bits.Add(d % 2);
                d /= 2;
            }
            var result = d.ToString();
            for (int i = bits.Count - 1; i >= 0; i--)
                result += bits[i];
            return result;
        }

        // 十進制轉八進制
        public string DtoO(int d)
        {
            if (d < 8) return d.ToString();
            var digits = new System.Collections.Generic.List();
            while (d >= 8)
            {
                digits.Add(d % 8);
                d /= 8;
            }
            var result = d.ToString();
            for (int i = digits.Count - 1; i >= 0; i--)
                result += digits[i];
            return result;
        }

        // 十進制轉十六進制
        public string DtoX(int d)
        {
            if (d < 16) return ToHexChar(d);
            var digits = new System.Collections.Generic.List();
            while (d >= 16)
            {
                digits.Add(ToHexChar(d % 16));
                d /= 16;
            }
            var result = ToHexChar(d);
            for (int i = digits.Count - 1; i >= 0; i--)
                result += digits[i];
            return result;
        }

        private string ToHexChar(int v) => v switch
        {
            10 => "A", 11 => "B", 12 => "C", 13 => "D", 14 => "E", 15 => "F",
            _ => v.ToString()
        };

        // UI 事件
        private void btnToBin_Click(object sender, EventArgs e)
            => txtResult.Text = DtoB(int.Parse(txtInput.Text));
        private void btnToOct_Click(object sender, EventArgs e)
            => txtResult.Text = DtoO(int.Parse(txtInput.Text));
        private void btnToHex_Click(object sender, EventArgs e)
            => txtResult.Text = DtoX(int.Parse(txtInput.Text));
    }
}

算法優化建議

  • 使用 Convert.ToString(value, 2/8/16) 內置方法(生產代碼首選)
  • 位運算優化:value & 1 替代 % 2,value >>= 1 替代 /= 2
  • 預分配 StringBuilder 避免字符串拼接開銷
  • 處理負數:補碼表示或拋出異常

內置方法驗證


int n = 255;
Console.WriteLine(Convert.ToString(n, 2));  // 11111111
Console.WriteLine(Convert.ToString(n, 8));  // 377
Console.WriteLine(Convert.ToString(n, 16)); // FF

總結

手寫進制轉換算法有助於理解計算機基礎,但實際項目請直接使用 Convert.ToString 或 value.ToString("X")。本文提供完整可運行 WinForms 代碼,涵蓋二/八/十六進制轉換、UI 綁定、十六進制字符映射邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved