Files
HTCloud/HT.Cloud.Code/Extend/Ext.Number.cs

97 lines
3.2 KiB
C#
Raw Normal View History

2023-03-03 16:07:50 +08:00

using System;
using System.Text;
using System.Collections.Generic;
using System.Security.Cryptography;
namespace HT.Cloud.Code
{
/// <summary>
/// 数值扩展类
/// </summary>
public static partial class Extensions
{
#region
/// <summary>
/// 10进制转换到2-36进制
/// </summary>
/// <param name="this">10进制数字</param>
/// <param name="radix">进制范围2-36</param>
/// <param name="digits">编码取值规则,最大转换位数不能大于该字符串的长度</param>
/// <returns></returns>
public static string ToBase(this long @this, int radix, string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")
{
const int BitsInLong = 64;
if (radix < 2 || radix > digits.Length)
throw new ArgumentException("The radix must be >= 2 and <= " + digits.Length.ToString());
if (@this == 0)
return "0";
var index = BitsInLong - 1;
var currentNumber = Math.Abs(@this);
var charArray = new char[BitsInLong];
while (currentNumber != 0)
{
var remainder = (int)(currentNumber % radix);
charArray[index--] = digits[remainder];
currentNumber /= radix;
}
var result = new string(charArray, index + 1, BitsInLong - index - 1);
if (@this < 0)
{
result = "-" + result;
}
return result;
}
/// <summary>
/// byte转16进制
/// </summary>
/// <param name="this"></param>
/// <returns></returns>
public static string ToHex(this byte @this) => Convert.ToString(@this, 16);
/// <summary>
/// 2进制转16进制
/// </summary>
/// <param name="this"></param>
/// <returns></returns>
public static string ToHex(this string @this) => Convert.ToString(Convert.ToInt64(@this, 2), 16);
/// <summary>
/// 16进制转2进制
/// </summary>
/// <param name="this"></param>
/// <returns></returns>
public static string ToBinary(this string @this) => Convert.ToString(Convert.ToInt64(@this, 16), 2);
/// <summary>
/// 2进制/16进制转8进制
/// </summary>
/// <param name="this"></param>
/// <param name="fromBase">2或者16表示2进制或者16进制</param>
/// <returns></returns>
public static string ToOctal(this string @this, int fromBase) => Convert.ToString(Convert.ToInt64(@this, fromBase), 8);
/// <summary>
/// 2进制/16进制转10进制
/// </summary>
/// <param name="this"></param>
/// <param name="fromBase">2或者16表示2进制或者16进制</param>
/// <returns></returns>
public static string ToDecimalism(this string @this, int fromBase)
{
if (fromBase == 16)
return Convert.ToInt32(@this, 16).ToString();
else
return Convert.ToString(Convert.ToInt64(@this, 2), 10);
}
#endregion
}
}