From 8f31114500a701acbab71e713678820c9abd5ea4 Mon Sep 17 00:00:00 2001 From: Elivo Date: Thu, 31 Jul 2025 16:32:46 +0800 Subject: [PATCH] =?UTF-8?q?ToX2=20=E6=94=AF=E6=8C=81=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E5=88=86=E9=9A=94=E7=AC=A6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apewer/BytesUtility.cs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Apewer/BytesUtility.cs b/Apewer/BytesUtility.cs index 066efb9..eb31af8 100644 --- a/Apewer/BytesUtility.cs +++ b/Apewer/BytesUtility.cs @@ -223,6 +223,33 @@ namespace Apewer return new string(chars); } + /// 将字节数组格式化为十六进制字符串,可指定大小写。 + /// 例:D41D8CD98F00B204E9800998ECF8427E + public static string ToX2(this byte[] bytes, string separator, bool upper = true) + { + if (bytes == null) return ""; + var join = separator.NotEmpty(); + + var length = bytes.Length; + if (length < 1) return TextUtility.Empty; + + var sb = new StringBuilder(); + var hex = upper ? UpperHex : LowerHex; + for (var i = 0; i < length; i++) + { + var value = bytes[i]; + var offset = i * 2; + var a = hex[value / 16]; + var b = hex[value % 16]; + + if (i > 0 && join) sb.Append(separator); + sb.Append(a); + sb.Append(b); + } + + return sb.ToString(); + } + /// Byte[] -> Base64 public static string ToBase64(params byte[] bytes) {