內建轉換方法:Convert 類別雙向支援
十進制 → 其他進制 (Convert.ToString(value, toBase))
int dec = 166;
Console.WriteLine($"二進制: {Convert.ToString(dec, 2)}"); // 10100110
Console.WriteLine($"八進制: {Convert.ToString(dec, 8)}"); // 246
Console.WriteLine($"十六進制: {Convert.ToString(dec, 16)}"); // A6
// 支援基數: 2, 8, 10, 16
其他進制 → 十進制 (Convert.ToInt32(string, fromBase))
Console.WriteLine($"二進制 111101 → {Convert.ToInt32("111101", 2)}"); // 61
Console.WriteLine($"八進制 44 → {Convert.ToInt32("44", 8)}"); // 36
Console.WriteLine($"十六進制 CC → {Convert.ToInt32("CC", 16)}"); // 204
// 同樣支援基數 2, 8, 10, 16
進階格式化:ToString("X")、ToString("X8")
int val = 255;
val.ToString("X"); // "FF" (大寫十六進制)
val.ToString("x"); // "ff" (小寫)
val.ToString("X4"); // "00FF" (補零至 4 位)
val.ToString("X8"); // "000000FF"
位元運算補充:手動實作轉換邏輯
// 十進制轉二進制字串 (不使用 Convert)
public static string ToBinary(int value, int bits = 32)
{
char[] buffer = new char[bits];
for (int i = bits - 1; i >= 0; i--)
{
buffer[i] = (value & 1) == 1 ? '1' : '0';
value >>= 1;
}
return new string(buffer).TrimStart('0'); // 移除前導零
}
// 十六進制字串轉位元陣列
public static byte[] HexToBytes(string hex)
{
hex = hex.Replace(" ", "").Replace("-", "");
byte[] bytes = new byte[hex.Length / 2];
for (int i = 0; i < bytes.Length; i++)
bytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
return bytes;
}
// 位元陣列轉十六進制字串
public static string BytesToHex(byte[] bytes)
=> BitConverter.ToString(bytes).Replace("-", "");
常用進制常數前綴
0b1010 (C# 7.0+ 二進制字面值)
0123 (C# 不支援八進制字面值,需用 Convert.ToInt32("123", 8))
0xFF / 0Xff (十六進制字面值)
位元旗標操作實用模式
[Flags]
enum Permissions { None = 0, Read = 1, Write = 2, Execute = 4, Admin = 8 }
var p = Permissions.Read | Permissions.Write; // 合併旗標 (3)
bool canRead = (p & Permissions.Read) != 0; // 檢查旗標
p |= Permissions.Execute; // 新增旗標
p &= ~Permissions.Write; // 移除旗標
p ^= Permissions.Admin; // 切換旗標