MES-ETL/MesETL.App/Helpers/Extensions.String.cs

70 lines
2.0 KiB
C#
Raw Normal View History

2023-12-28 15:18:03 +08:00
using System.Globalization;
using System.Text;
namespace MesETL.App.Helpers;
2023-12-28 15:18:03 +08:00
public static class StringExtensions
{
2024-01-29 09:29:16 +08:00
/// <summary>
/// 截断字符串
/// </summary>
/// <param name="this"></param>
/// <param name="maxLength">截断长度</param>
/// <returns></returns>
2023-12-28 15:18:03 +08:00
public static string Omit(this ReadOnlySpan<char> @this, int maxLength)
{
if (@this.Length > maxLength)
return @this[..maxLength].ToString() + "...";
return @this.ToString();
}
2024-01-29 09:29:16 +08:00
/// <summary>
/// 截断字符串
/// </summary>
/// <param name="this"></param>
/// <param name="maxLength">截断长度</param>
/// <returns></returns>
2023-12-28 15:18:03 +08:00
public static string Omit(this string @this, int maxLength) => Omit(@this.AsSpan(), maxLength);
2024-01-29 09:29:16 +08:00
/// <summary>
/// 将16进制字符串转换为字符串
/// </summary>
/// <param name="hexString"></param>
/// <param name="encoding"></param>
/// <returns></returns>
2023-12-28 15:18:03 +08:00
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);
}
2024-01-29 09:29:16 +08:00
/// <summary>
/// 检查是否为JSON字符串
/// </summary>
/// <param name="hexStr"></param>
/// <returns></returns>
2023-12-28 15:18:03 +08:00
public static bool CheckJsonHex(ReadOnlySpan<char> hexStr)
{
if (hexStr.Length < 2)
return false;
return FromHex(hexStr[..2]) is ['{'] or ['['];
}
}