using System.Globalization;
using System.Text;
namespace MesETL.App.Helpers;
public static class StringExtensions
{
///
/// 截断字符串
///
///
/// 截断长度
///
public static string Omit(this ReadOnlySpan @this, int maxLength)
{
if (@this.Length > maxLength)
return @this[..maxLength].ToString() + "...";
return @this.ToString();
}
///
/// 截断字符串
///
///
/// 截断长度
///
public static string Omit(this string @this, int maxLength) => Omit(@this.AsSpan(), maxLength);
///
/// 将16进制字符串转换为字符串
///
///
///
///
public static string FromHex(ReadOnlySpan hexString, Encoding? encoding = null)
{
encoding ??= Encoding.UTF8;
var realLength = 0;
for (var i = hexString.Length - 2; i >= 0; i -= 2)
{
var b = byte.Parse(hexString.Slice(i, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
if (b != 0) //not NULL character
{
realLength = i + 2;
break;
}
}
var bytes = new byte[realLength / 2];
for (var i = 0; i < bytes.Length; i++)
{
bytes[i] = byte.Parse(hexString.Slice(i * 2, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
}
return encoding.GetString(bytes);
}
///
/// 检查是否为JSON字符串
///
///
///
public static bool CheckJsonHex(ReadOnlySpan hexStr)
{
if (hexStr.Length < 2)
return false;
return FromHex(hexStr[..2]) is ['{'] or ['['];
}
}