首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# byte 陣列擴充方法實戰指南 (上):十六進位、Base64、型別轉換、編碼解碼、雜湊

     編輯:關於C語言

前言

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"

場景二:轉換為 Base64 字串

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")); // "中文"

場景五:雜湊運算 (SHA256、MD5 等)

// 指定演算法
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典型用途
ToHexstringbyte.ToString("X2")除錯顯示、日誌記錄、金鑰指紋
ToBase64StringstringConvert.ToBase64StringJSON 傳輸、Data URI、Token 編碼
ToInt/ToInt64int/longBitConverter.ToInt32/64二進位協定解析、檔案格式讀取
DecodestringEncoding.GetString文字檔讀取、網路封包解碼
Hashbyte[]HashAlgorithm.ComputeHash密碼儲存、完整性驗證、數位簽章

總結

前五大場景涵蓋 byte 陣列最常見的「序列化為文字」、「反序列化為數值/字串」、「密碼學運算」需求。擴充方法讓呼叫端寫成 data.ToHex()、data.Hash("SHA256") 等流暢語法,配合 StringBuilder、BitConverter、HashAlgorithm 等 BCL 核心 API,是每個 C# 專案必備的工具箱組件。下篇將介紹位元操作、檔案儲存、串流轉換等進階場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved