/// <summary>
/// 处理数据类型转换,数制转换、编码转换相关的类
/// </summary>
public class ConvertHelper
{
#region 补足位数
/// <summary>
/// 指定字符串的固定长度,如果字符串小于固定长度,
/// 则在字符串的前面补足零,可设置的固定长度最大为9位
/// </summary>
/// <param name="text">原始字符串</param>
/// <param name="limitedLength">字符串的固定长度</param>
public static string RepairZero(string text, int limitedLength)
{
//补足0的字符串
string temp = "";
//补足0
for (int i = 0; i < limitedLength - text.Length; i++)
{
temp += "0";
}
//连接text
temp += text;
//返回补足0的字符串
return temp;
}
#endregion
#region 各进制数间转换
/// <summary>
/// 实现各进制数间的转换。ConvertBase("15",10,16)表示将十进制数15转换为16进制的数。
/// </summary>
/// <param name="value">要转换的值,即原值</param>
/// <param name="from">原值的进制,只能是2,8,10,16四个值。</param>
/// <param name="to">要转换到的目标进制,只能是2,8,10,16四个值。</param>
public static string ConvertBase(string value, int from, int to)
{
try
{
int intValue = Convert.ToInt32(value, from); //先转成10进制
string result = Convert.ToString(intValue, to); //再转成目标进制
if (to == 2)
{
int resultLength = result.Length; //获取二进制的长度
switch (resultLength)
{
case 7:
result = "0" + result;
break;
case 6:
result = "00" + result;
break;
case 5:
result = "000" + result;
break;
case 4:
result = "0000" + result;
break;
case 3:
result = "00000" + result;
break;
}
}
return result;
}
catch
{
return "0";
}
}
#endregion
#region 使用指定字符集将string转换成byte[]
/// <summary>
/// 将string转换成byte[]
/// </summary>
/// <param name="text">要转换的字符串</param>
public static byte[] StringToBytes(string text)
{
return Encoding.UTF8.GetBytes(text);
}
/// <summary>
/// 使用指定字符集将string转换成byte[]
/// </summary>
/// <param name="text">要转换的字符串</param>
/// <param name="encoding">字符编码</param>
public static byte[] StringToBytes(string text, Encoding encoding)
{
return encoding.GetBytes(text);
}
#endregion
#region 使用指定字符集将byte[]转换成string
/// <summary>
/// 将byte[]转换成string
/// </summary>
/// <param name="bytes">要转换的字节数组</param>
public static string BytesToString(byte[] bytes)
{
return Encoding.UTF8.GetString(bytes);
}
/// <summary>
/// 使用指定字符集将byte[]转换成string
/// </summary>
/// <param name="bytes">要转换的字节数组</param>
/// <param name="encoding">字符编码</param>
public static string BytesToString(byte[] bytes, Encoding encoding)
{
return encoding.GetString(bytes);
}
#endregion
#region 将流转换成字符串
/// <summary>
/// 将流转换成字符串,同时关闭该流
/// </summary>
/// <param name="stream">流</param>
/// <param name="encoding">字符编码</param>
public static string StreamToString(Stream stream, Encoding encoding)
{
//获取的文本
string streamText;
//读取流
try
{
using (var reader = new StreamReader(stream, encoding))
{
streamText = reader.ReadToEnd();
}
}
catch
{
return string.Empty;
}
finally
{
stream.Close();
}
//返回文本
return streamText;
}
/// <summary>
/// 将流转换成字符串,同时关闭该流
/// </summary>
/// <param name="stream">流</param>
public static string StreamToString(Stream stream)
{
return StreamToString(stream, Encoding.Default);
}
#endregion
#region 将byte[]转换成int
/// <summary>
/// 将byte[]转换成int
/// </summary>
/// <param name="data">需要转换成整数的byte数组</param>
public static int BytesToInt32(byte[] data)
{
//如果传入的字节数组长度小于4,则返回0
if (data.Length < 4)
{
return 0;
}
//定义要返回的整数
int num = 0;
//如果传入的字节数组长度大于4,需要进行处理
if (data.Length >= 4)
{
//创建一个临时缓冲区
var tempBuffer = new byte[4];
//将传入的字节数组的前4个字节复制到临时缓冲区
Buffer.BlockCopy(data, 0, tempBuffer, 0, 4);
//将临时缓冲区的值转换成整数,并赋给num
num = BitConverter.ToInt32(tempBuffer, 0);
}
//返回整数
return num;
}
#endregion
#region 转换为日期
/// <summary>
/// 将数据转换为日期,如果数据无效则返回"1900-1-1"
/// </summary>
/// <param name="date">日期</param>
public static DateTime ToDateTime(object date)
{
try
{
if (ValidationHelper.IsNullOrEmpty(date))
{
return Convert.ToDateTime("1900-1-1");
}
else
{
return Convert.ToDateTime(date);
}
}
catch
{
return Convert.ToDateTime("1900-1-1");
}
}
#endregion
#region 将数据转换为GUID
/// <summary>
/// 将数据转换为GUID
/// </summary>
/// <param name="data"></param>
public static Guid ToGuid(object data)
{
//有效性验证
if (ValidationHelper.IsNullOrEmpty(data))
{
return Guid.Empty;
}
try
{
return new Guid(data.ToString());
}
catch
{
return Guid.Empty;
}
}
#endregion
#region 将数据转换为整型
#region 重载1
/// <summary>
/// 将数据转换为整型
/// </summary>
/// <typeparam name="T">数据的类型</typeparam>
/// <param name="data">要转换的数据</param>
public static int ToInt32<T>(T data)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
return Convert.ToInt32(data);
}
}
catch
{
return 0;
}
}
#endregion
#region 重载2
/// <summary>
/// 将数据转换为整型
/// </summary>
/// <param name="data">要转换的数据</param>
public static int ToInt32(object data)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
return Convert.ToInt32(data);
}
}
catch
{
return 0;
}
}
#endregion
#endregion
#region 将数据转换为字符串
/// <summary>
/// 将数据转换为字符串
/// </summary>
/// <param name="data">数据</param>
public static string ToString(object data)
{
//有效性验证
if (data == null)
{
return string.Empty;
}
return data.ToString();
}
#endregion
#region 将数据转换为布尔型
#region 重载1
/// <summary>
/// 将数据转换为布尔型
/// </summary>
/// <typeparam name="T">数据的类型</typeparam>
/// <param name="data">要转换的数据</param>
public static bool ToBoolean<T>(T data)
{
try
{
//如果为空则返回false
if (ValidationHelper.IsNullOrEmpty(data))
{
return false;
}
else
{
return Convert.ToBoolean(data);
}
}
catch
{
return false;
}
}
#endregion
#region 重载2
/// <summary>
/// 将数据转换为布尔型
/// </summary>
/// <param name="data">要转换的数据</param>
public static bool ToBoolean(object data)
{
try
{
//如果为空则返回false
if (ValidationHelper.IsNullOrEmpty(data))
{
return false;
}
else
{
return Convert.ToBoolean(data);
}
}
catch
{
return false;
}
}
#endregion
#endregion
#region 将数据转换为单精度浮点型
#region 重载1
/// <summary>
/// 将数据转换为单精度浮点型
/// </summary>
/// <typeparam name="T">数据的类型</typeparam>
/// <param name="data">要转换的数据</param>
public static float ToFloat<T>(T data)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
return Convert.ToSingle(data);
}
}
catch
{
return 0;
}
}
#endregion
#region 重载2
/// <summary>
/// 将数据转换为单精度浮点型
/// </summary>
/// <param name="data">要转换的数据</param>
public static float ToFloat(object data)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty<object>(data))
{
return 0;
}
else
{
return Convert.ToSingle(data);
}
}
catch
{
return 0;
}
}
#endregion
#endregion
#region 将数据转换为双精度浮点型
#region 重载1
/// <summary>
/// 将数据转换为双精度浮点型
/// </summary>
/// <typeparam name="T">数据的类型</typeparam>
/// <param name="data">要转换的数据</param>
public static double ToDouble<T>(T data)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
return Convert.ToDouble(data);
}
}
catch
{
return 0;
}
}
#endregion
#region 重载2
/// <summary>
/// 将数据转换为双精度浮点型,并设置小数位
/// </summary>
/// <typeparam name="T">数据的类型</typeparam>
/// <param name="data">要转换的数据</param>
/// <param name="decimals">小数的位数</param>
public static double ToDouble<T>(T data, int decimals)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
double temp = Convert.ToDouble(data);
return Math.Round(temp, decimals);
}
}
catch
{
return 0;
}
}
#endregion
#region 重载3
/// <summary>
/// 将数据转换为双精度浮点型
/// </summary>
/// <param name="data">要转换的数据</param>
public static double ToDouble(object data)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
return Convert.ToDouble(data);
}
}
catch
{
return 0;
}
}
#endregion
#region 重载4
/// <summary>
/// 将数据转换为双精度浮点型,并设置小数位
/// </summary>
/// <param name="data">要转换的数据</param>
/// <param name="decimals">小数的位数</param>
public static double ToDouble(object data, int decimals)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty<object>(data))
{
return 0;
}
else
{
double temp = Convert.ToDouble(data);
return Math.Round(temp, decimals);
}
}
catch
{
return 0;
}
}
#endregion
#endregion
#region 将数据转换为Decimal类型
#region 重载1
/// <summary>
/// 将数据转换为Decimal类型
/// </summary>
/// <typeparam name="T">数据的类型</typeparam>
/// <param name="data">要转换的数据</param>
public static decimal ToDecimal<T>(T data)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
return Convert.ToDecimal(data);
}
}
catch
{
return 0;
}
}
#endregion
#region 重载2
/// <summary>
/// 将数据转换为Decimal类型
/// </summary>
/// <typeparam name="T">数据的类型</typeparam>
/// <param name="data">要转换的数据</param>
/// <param name="decimals">小数的位数</param>
public static decimal ToDecimal<T>(T data, int decimals)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
decimal temp = Convert.ToDecimal(data);
return Math.Round(temp, decimals);
}
}
catch
{
return 0;
}
}
#endregion
#region 重载3
/// <summary>
/// 将数据转换为Decimal类型
/// </summary>
/// <param name="data">要转换的数据</param>
public static decimal ToDecimal(object data)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty(data))
{
return 0;
}
else
{
return Convert.ToDecimal(data);
}
}
catch
{
return 0;
}
}
#endregion
#region 重载4
/// <summary>
/// 将数据转换为Decimal类型
/// </summary>
/// <param name="data">要转换的数据</param>
/// <param name="decimals">小数的位数</param>
public static decimal ToDecimal(object data, int decimals)
{
try
{
//如果为空则返回0
if (ValidationHelper.IsNullOrEmpty<object>(data))
{
return 0;
}
else
{
decimal temp = Convert.ToDecimal(data);
return Math.Round(temp, decimals);
}
}
catch
{
return 0;
}
}
#endregion
#endregion
#region 将数据转换为指定类型
#region 重载一
/// <summary>
/// 将数据转换为指定类型
/// </summary>
/// <param name="data">转换的数据</param>
/// <param name="targetType">转换的目标类型</param>
public static object ConvertTo(object data, Type targetType)
{
//如果数据为空,则返回
if (ValidationHelper.IsNullOrEmpty(data))
{
return null;
}
try
{
//如果数据实现了IConvertible接口,则转换类型
if (data is IConvertible)
{
return Convert.ChangeType(data, targetType);
}
else
{
return data;
}
}
catch
{
return null;
}
}
#endregion
#region 重载二
/// <summary>
/// 将数据转换为指定类型
/// </summary>
/// <typeparam name="T">转换的目标类型</typeparam>
/// <param name="data">转换的数据</param>
public static T ConvertTo<T>(object data)
{
//如果数据为空,则返回
if (ValidationHelper.IsNullOrEmpty(data))
{
return default(T);
}
try
{
//如果数据是T类型,则直接转换
if (data is T)
{
return (T)data;
}
//如果目标类型是枚举
if (typeof(T).BaseType == typeof(Enum))
{
return EnumHelper.GetInstance<T>(data);
}
//如果数据实现了IConvertible接口,则转换类型
if (data is IConvertible)
{
return (T)Convert.ChangeType(data, typeof(T));
}
else
{
return default(T);
}
}
catch
{
return default(T);
}
}
#endregion
#endregion
/// <summary>
/// string型转换为bool型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <returns>转换后的bool类型结果</returns>
public static bool StrToBool(string strValue)
{
if (!string.IsNullOrEmpty(strValue))
{
strValue = strValue.Trim();
return (((string.Compare(strValue, "true", true) == 0) || (string.Compare(strValue, "yes", true) == 0)) ||
(string.Compare(strValue, "1", true) == 0));
}
return false;
}
/// <summary>
/// string型转换为时间型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的时间类型结果</returns>
public static DateTime StrToDateTime(object strValue, DateTime defValue)
{
if ((strValue == null) || (strValue.ToString().Length > 20))
{
return defValue;
}
DateTime intValue;
if (!DateTime.TryParse(strValue.ToString(), out intValue))
{
intValue = defValue;
}
return intValue;
}
/// <summary>
/// 将输入的long型转换为DateTime型
/// </summary>
/// <param name="inputLong">long数值</param>
/// <returns></returns>
public static DateTime BigIntToDateTime(long inputLong)
{
DateTime beginTime = DateTime.Now.Date;
DateTime.TryParse("1970-01-01", out beginTime);
double addDays = inputLong / (double)(24 * 3600);
return beginTime.AddDays(addDays);
}
/// <summary>
/// object型转换为decimal型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <returns>转换后的decimal类型结果</returns>
public static decimal StrToDecimal(object strValue)
{
if (!Convert.IsDBNull(strValue) && !Equals(strValue, null))
{
return StrToDecimal(strValue.ToString());
}
return 0M;
}
/// <summary>
/// string型转换为decimal型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <returns>转换后的decimal类型结果</returns>
public static decimal StrToDecimal(string strValue)
{
decimal num;
decimal.TryParse(strValue, out num);
return num;
}
/// <summary>
/// string型转换为decimal型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的decimal类型结果</returns>
public static decimal StrToDecimal(string input, decimal defaultValue)
{
decimal num;
if (decimal.TryParse(input, out num))
{
return num;
}
return defaultValue;
}
/// <summary>
/// string型转换为double型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <returns>转换后的double类型结果</returns>
public static double StrToDouble(object strValue)
{
if (!Convert.IsDBNull(strValue) && !Equals(strValue, null))
{
return StrToDouble(strValue.ToString());
}
return 0.0;
}
/// <summary>
/// string型转换为double型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <returns>转换后的double类型结果</returns>
public static double StrToDouble(string strValue)
{
double num;
double.TryParse(strValue, out num);
return num;
}
/// <summary>
/// string型转换为float型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的float类型结果</returns>
public static float StrToFloat(object strValue, float defValue)
{
if ((strValue == null) || (strValue.ToString().Length > 10))
{
return defValue;
}
float intValue = defValue;
if (strValue != null)
{
bool IsFloat = new Regex(@"^([-]|[0-9])[0-9]*(\.\w*)?$").IsMatch(strValue.ToString());
if (IsFloat)
{
intValue = Convert.ToSingle(strValue);
}
}
return intValue;
}
/// <summary>
/// string型转换为int型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <returns>转换后的int类型结果.如果要转换的字符串是非数字,则返回-1.</returns>
public static int StrToInt(object strValue)
{
int defValue = -1;
if ((strValue == null) || (strValue.ToString() == string.Empty) || (strValue.ToString().Length > 10))
{
return defValue;
}
string val = strValue.ToString();
string firstletter = val[0].ToString();
if (val.Length == 10 && ValidationHelper.IsNumber(firstletter) && int.Parse(firstletter) > 1)
{
return defValue;
}
else if (val.Length == 10 && !ValidationHelper.IsNumber(firstletter))
{
return defValue;
}
int intValue = defValue;
if (strValue != null)
{
bool IsInt = new Regex(@"^([-]|[0-9])[0-9]*$").IsMatch(strValue.ToString());
if (IsInt)
{
intValue = Convert.ToInt32(strValue);
}
}
return intValue;
}
/// <summary>
/// string型转换为int型
/// </summary>
/// <param name="strValue">要转换的字符串</param>
/// <param name="defValue">缺省值</param>
/// <returns>转换后的int类型结果</returns>
public static int StrToInt(object strValue, int defValue)
{
if ((strValue == null) || (strValue.ToString() == string.Empty) || (strValue.ToString().Length > 10))
{
return defValue;
}
string val = strValue.ToString();
string firstletter = val[0].ToString();
if (val.Length == 10 && ValidationHelper.IsNumber(firstletter) && int.Parse(firstletter) > 1)
{
return defValue;
}
else if (val.Length == 10 && !ValidationHelper.IsNumber(firstletter))
{
return defValue;
}
int intValue = defValue;
if (strValue != null)
{
bool IsInt = new Regex(@"^([-]|[0-9])[0-9]*$").IsMatch(strValue.ToString());
if (IsInt)
{
intValue = Convert.ToInt32(strValue);
}
}
return intValue;
}
/// <summary>
/// 将long型数值转换为Int32类型
/// </summary>
/// <param name="objNum"></param>
/// <returns></returns>
public static int SafeInt32(object objNum)
{
if (objNum == null)
{
return 0;
}
string strNum = objNum.ToString();
if (ValidationHelper.IsNumber(strNum))
{
if (strNum.Length > 9)
{
return int.MaxValue;
}
return Int32.Parse(strNum);
}
else
{
return 0;
}
}
}