通用步驟:循環除以基數,收集餘數,逆序輸出。十六進制需額外處理 10-15 → A-F 映射。
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 替代 /= 2StringBuilder 避免字符串拼接開銷
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 綁定、十六進制字符映射邏輯。