byte 陣列是 C# 處理二進位資料的核心型別。透過擴充方法將常見操作封裝為流暢 API,能大幅提升開發效率。本文介紹前五大經典場景:十六進位字串、Base64、基礎型別轉換、指定編碼解碼、雜湊運算。
public static class ByteArrayExtensions
{
// 單一 byte
public static string ToHex(this byte b) => b.ToString("X2");
// byte 序列 (IEnumerable 包含 byte[])
public static string ToHex(this IEnumerable bytes)
{
var sb = new StringBuilder();
foreach (var b in bytes) sb.Append(b.ToString("X2"));
return sb.ToString();
}
}
用法:
var data = new byte[] { 0x12, 0xAB, 0xFF };
Console.WriteLine(data.ToHex()); // "12ABFF"
// 可讀性版:每 byte 加空格
var readable = string.Join(" ", data.Select(b => b.ToString("X2"))); // "12 AB FF"
public static string ToBase64String(this byte[] bytes)
=> Convert.ToBase64String(bytes);
用法:byteArray.ToBase64String() — 常用於 JSON 傳輸二進位、Data URI、Basic Auth。
public static int ToInt(this byte[] value, int startIndex)
=> BitConverter.ToInt32(value, startIndex);
public static long ToInt64(this byte[] value, int startIndex)
=> BitConverter.ToInt64(value, startIndex);
// 同理可擴充 ToShort, ToFloat, ToDouble, ToChar 等
public static float ToSingle(this byte[] value, int startIndex)
=> BitConverter.ToSingle(value, startIndex);
注意:BitConverter 依執行平台 Endianness (通常 Little-Endian),跨平台傳輸需自行處理位序。
public static string Decode(this byte[] data, Encoding encoding)
=> encoding.GetString(data);
用法:
var utf8Bytes = Encoding.UTF8.GetBytes("中文");
var text = utf8Bytes.Decode(Encoding.UTF8); // "中文"
var big5Bytes = Encoding.GetEncoding("big5").GetBytes("中文");
text = big5Bytes.Decode(Encoding.GetEncoding("big5")); // "中文"
// 指定演算法
public static byte[] Hash(this byte[] data, string hashName)
{
using (var alg = string.IsNullOrEmpty(hashName)
? HashAlgorithm.Create() // 預設 SHA256 (.NET Core) / SHA1 (.NET Framework)
: HashAlgorithm.Create(hashName)) // "MD5", "SHA1", "SHA256", "SHA384", "SHA512"
{
return alg.ComputeHash(data);
}
}
// 預設演算法
public static byte[] Hash(this byte[] data) => data.Hash(null);
用法:
var hash = Encoding.UTF8.GetBytes("password").Hash("SHA256");
Console.WriteLine(hash.ToHex()); // 64 字元十六進位
| 場景 | 輸出型別 | 核心 BCL API | 典型用途 |
|---|---|---|---|
| ToHex | string | byte.ToString("X2") | 除錯顯示、日誌記錄、金鑰指紋 |
| ToBase64String | string | Convert.ToBase64String | JSON 傳輸、Data URI、Token 編碼 |
| ToInt/ToInt64 | int/long | BitConverter.ToInt32/64 | 二進位協定解析、檔案格式讀取 |
| Decode | string | Encoding.GetString | 文字檔讀取、網路封包解碼 |
| Hash | byte[] | HashAlgorithm.ComputeHash | 密碼儲存、完整性驗證、數位簽章 |
前五大場景涵蓋 byte 陣列最常見的「序列化為文字」、「反序列化為數值/字串」、「密碼學運算」需求。擴充方法讓呼叫端寫成 data.ToHex()、data.Hash("SHA256") 等流暢語法,配合 StringBuilder、BitConverter、HashAlgorithm 等 BCL 核心 API,是每個 C# 專案必備的工具箱組件。下篇將介紹位元操作、檔案儲存、串流轉換等進階場景。