在 C# 開發中,位元組(byte)轉換是常見的基礎操作。無論是處理網路傳輸、檔案 I/O、加密演算法,還是與硬體裝置溝通,都少不了將各種資料型別轉換為位元組或位元組陣列。本文整理四種實用的轉換場景,提供可直接套用的靜態方法,並說明關鍵實作細節。
此方法接受 object 型別參數,內部先檢查 null,再嘗試以 byte.TryParse 解析字串表示形式。若解析失敗或物件為 null,回傳預設值 0,避免拋出例外。
public static byte GetByte(object o)
{
byte retVal = 0;
if (o != null)
{
if (byte.TryParse(o.ToString().Trim(), out byte tmp))
{
retVal = tmp;
}
}
return retVal;
}
適用場景: 從資料庫讀取可能為 DBNull 的欄位、解析使用者輸入的文字方塊內容、處理弱型別集合中的數值。
利用 Convert.ToByte(string, 16) 直接解析十六進位字串。以 try-catch 包裝,格式錯誤時回傳 0。注意:輸入字串可包含或不包含 0x/0X 前綴,Convert.ToByte 皆能正確處理。
public static byte GetByteFromHex(string hexValue)
{
try
{
return Convert.ToByte(hexValue, 16);
}
catch
{
return 0;
}
}
適用場景: 解析色碼(如 "FF"、"0xFF")、通訊協定中的十六進位指令碼、設定檔中的位元旗標。
透過 Convert.ToChar 取得字元,再轉換為對應的位元組值(實際上取 Unicode 代碼點的低位元組)。適合處理單一字元的編碼轉換。
public static byte GetByteFromSingleString(string value)
{
return GetByteFromChar(Convert.ToChar(value));
}
// 輔助方法(假設存在)
private static byte GetByteFromChar(char c) => (byte)c;
注意: 若字元超出 0-255 範圍(如中文字),僅保留低位元組,可能導致資料遺失。完整字元編碼建議使用 Encoding.GetBytes。
使用 Encoding.Default.GetBytes 依目前系統預設 ANSI 編碼將字串轉為位元組陣列。跨平台或特定編碼需求時,建議明確指定 Encoding.UTF8 或 Encoding.Unicode。
public static byte[] GetBytes(string values)
{
return System.Text.Encoding.Default.GetBytes(values);
}
最佳實務建議: 明確指定編碼以確保跨環境一致性,例如 Encoding.UTF8.GetBytes(values)。
ByteConvertHelper),並加入 XML 文件註解。Span<byte>、Memory<byte> 或 BinaryPrimitives 進行無配置轉換。Encoding.Default 在不同作業系統產生不一致結果。掌握這些基礎轉換技巧,能讓你在處理二進位資料、網路封包、檔案格式解析時更加得心應手。