在 .NET 開發中,常需將字串轉為十六進制表示,或從十六進制還原字串。這在網路傳輸、日誌記錄、資料序列化等場景極為常見。以下示範使用 BitConverter 與 Encoding 完成雙向轉換的標準做法。
string original = "jinjazz路過";
byte[] bytes = System.Text.Encoding.Default.GetBytes(original);
string hex = BitConverter.ToString(bytes); // 輸出: 6A-69-6E-6A-61-7A-7A-C2-B7-B9-FD
Console.WriteLine(hex);
BitConverter.ToString 會在每個位元組之間插入連字號,若需無分隔字串,可進一步 Replace("-", "")。
string[] hexParts = hex.Split('-');
byte[] bytes = new byte[hexParts.Length];
for (int i = 0; i < hexParts.Length; i++)
{
bytes[i] = Convert.ToByte(hexParts[i], 16);
}
string restored = System.Text.Encoding.Default.GetString(bytes);
Console.WriteLine(restored); // 輸出: jinjazz路過
此處採用 Encoding.Default 對應系統預設 ANSI 編碼頁;若專案統一使用 UTF-8,請改用 Encoding.UTF8 以避免中文亂碼。
public static class HexHelper
{
public static string ToHex(string input, Encoding encoding = null)
{
encoding ??= Encoding.Default;
return BitConverter.ToString(encoding.GetBytes(input)).Replace("-", "");
}
public static string FromHex(string hex, Encoding encoding = null)
{
encoding ??= Encoding.Default;
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 encoding.GetString(bytes);
}
}
封裝後即可輕鬆呼叫 HexHelper.ToHex("測試") 及 HexHelper.FromHex("E6B8ACE8A9A6"),提升程式碼可維護性。