70 lines
2.0 KiB
C#
70 lines
2.0 KiB
C#
using System.Globalization;
|
|
using System.Text;
|
|
|
|
namespace MesETL.Shared.Helper;
|
|
|
|
public static class StringExtensions
|
|
{
|
|
/// <summary>
|
|
/// 截断字符串
|
|
/// </summary>
|
|
/// <param name="this"></param>
|
|
/// <param name="maxLength">截断长度</param>
|
|
/// <returns></returns>
|
|
public static string Omit(this ReadOnlySpan<char> @this, int maxLength)
|
|
{
|
|
if (@this.Length > maxLength)
|
|
return @this[..maxLength].ToString() + "...";
|
|
return @this.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 截断字符串
|
|
/// </summary>
|
|
/// <param name="this"></param>
|
|
/// <param name="maxLength">截断长度</param>
|
|
/// <returns></returns>
|
|
public static string Omit(this string @this, int maxLength) => Omit(@this.AsSpan(), maxLength);
|
|
|
|
/// <summary>
|
|
/// 将16进制字符串转换为字符串
|
|
/// </summary>
|
|
/// <param name="hexString"></param>
|
|
/// <param name="encoding"></param>
|
|
/// <returns></returns>
|
|
public static string FromHex(ReadOnlySpan<char> 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查是否为JSON字符串
|
|
/// </summary>
|
|
/// <param name="hexStr"></param>
|
|
/// <returns></returns>
|
|
public static bool CheckJsonHex(ReadOnlySpan<char> hexStr)
|
|
{
|
|
if (hexStr.Length < 2)
|
|
return false;
|
|
return FromHex(hexStr[..2]) is ['{'] or ['['];
|
|
}
|
|
} |