• ConvertHelper类


    /// <summary>
        /// 处理数据类型转换,数制转换、编码转换相关的类
        /// </summary>
        public sealed class ConvertHelper
        {
            #region 类型转换
            /// <summary>
            /// 取得Int值,如果为Null 则返回0
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static int ToInt(object obj)
            {
                if (obj != null)
                {
                    int i;
                    int.TryParse(obj.ToString(), out i);
                    return i;
                }
                else
                    return 0;
            }
    
            public static float ToFloat(object obj)
            {
                float i;
                float.TryParse(obj.ToString(), out i);
                return i;
            }
    
            /// <summary>
            /// 取得Int值,如果不成功则返回指定exceptionvalue值
            /// </summary>
            /// <param name="obj">要计算的值</param>
            /// <param name="exceptionvalue">异常时的返回值</param>
            /// <returns></returns>
            public static int ToInt(object obj, int exceptionvalue)
            {
                if (obj == null)
                    return exceptionvalue;
                if (string.IsNullOrEmpty(obj.ToString()))
                    return exceptionvalue;
                int i = exceptionvalue;
                try { i = Convert.ToInt32(obj); }
                catch { i = exceptionvalue; }
                return i;
            }
    
            /// <summary>
            /// 取得byte值
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static byte ToByte(object obj)
            {
                if (obj.ToString() != "")
                    return byte.Parse(obj.ToString());
                else
                    return 0;
            }
    
            /// <summary>
            /// 获得Long值
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static long ToLong(object obj)
            {
                if (obj.ToString() != "")
                    return long.Parse(obj.ToString());
                else
                    return 0;
            }
    
            /// <summary>
            /// 取得Long值,如果不成功则返回指定exceptionvalue值
            /// </summary>
            /// <param name="obj">要计算的值</param>
            /// <param name="exceptionvalue">异常时的返回值</param>
            /// <returns></returns>
            public static long ToLong(object obj, long exceptionvalue)
            {
                if (obj == null)
                {
                    return exceptionvalue;
                }
                if (string.IsNullOrEmpty(obj.ToString()))
                {
                    return exceptionvalue;
                }
                long i = exceptionvalue;
                try
                {
                    i = Convert.ToInt64(obj);
                }
                catch
                {
                    i = exceptionvalue;
                }
                return i;
            }
    
            /// <summary>
            /// 取得Decimal值
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static decimal ToDecimal(object obj)
            {
                if (obj.ToString() != "")
                    return decimal.Parse(obj.ToString());
                else
                    return 0;
            }
    
            /// <summary>
            /// 取得DateTime值
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static DateTime ToDateTime(object obj)
            {
                if (obj.ToString() != "")
                    return DateTime.Parse(obj.ToString());
                else
                    return DateTime.Now;
                //return DateTime.MinValue;
            }
            /// <summary>
            /// 格式化日期 yyyy-MM-dd HH:mm
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static string FormatDateTime(object obj, string Format)
            {
                if (obj.ToString() != "")
                    return DateTime.Parse(obj.ToString()).ToString(Format);
                else
                    return "";
            }
            /// <summary>
            /// 取得bool值
            /// </summary>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static bool ToBool(object obj)
            {
                if (obj != null)
                {
                    bool flag;
                    bool.TryParse(obj.ToString(), out flag);
                    return flag;
                }
                else
                    return false;
            }
            #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)
            {
                if (!IsBaseNumber(from))
                    throw new ArgumentException("参数from只能是2,8,10,16四个值。");
    
                if (!IsBaseNumber(to))
                    throw new ArgumentException("参数to只能是2,8,10,16四个值。");
    
                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;
            }
    
            /// <summary>
            /// 判断是否是  2 8 10 16
            /// </summary>
            /// <param name="baseNumber"></param>
            /// <returns></returns>
            private static bool IsBaseNumber(int baseNumber)
            {
                if (baseNumber == 2 || baseNumber == 8 || baseNumber == 10 || baseNumber == 16)
                    return true;
                return false;
            }
    
            #endregion
    
            #region 使用指定字符集将string转换成byte[]
    
            /// <summary>
            /// 将string转换成byte[]
            /// </summary>
            /// <param name="text">要转换的字符串</param>
            public static byte[] StringToBytes(string text)
            {
                return Encoding.Default.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.Default.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 将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)
                {
                    //创建一个临时缓冲区
                    byte[] tempBuffer = new byte[4];
    
                    //将传入的字节数组的前4个字节复制到临时缓冲区
                    Buffer.BlockCopy(data, 0, tempBuffer, 0, 4);
    
                    //将临时缓冲区的值转换成整数,并赋给num
                    num = BitConverter.ToInt32(tempBuffer, 0);
                }
    
                //返回整数
                return num;
            }
            #endregion
    
            #region 将数据转换为整型
    
            /// <summary>
            /// 将数据转换为整型   转换失败返回默认值
            /// </summary>
            /// <typeparam name="T">数据类型</typeparam>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static int ToInt32<T>(T data, int defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToInt32(data);
                }
                catch
                {
                    return defValue;
                }
    
            }
    
            /// <summary>
            /// 将数据转换为整型   转换失败返回默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static int ToInt32(string data, int defValue)
            {
                //如果为空则返回默认值
                if (string.IsNullOrEmpty(data))
                {
                    return defValue;
                }
    
                int temp = 0;
                if (Int32.TryParse(data, out temp))
                {
                    return temp;
                }
                else
                {
                    return defValue;
                }
            }
    
            /// <summary>
            /// 将数据转换为整型  转换失败返回默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static int ToInt32(object data, int defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToInt32(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
            #endregion
    
            #region 将数据转换为布尔型
    
            /// <summary>
            /// 将数据转换为布尔类型  转换失败返回默认值
            /// </summary>
            /// <typeparam name="T">数据类型</typeparam>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static bool ToBoolean<T>(T data, bool defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToBoolean(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
            /// <summary>
            /// 将数据转换为布尔类型  转换失败返回 默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static bool ToBoolean(string data, bool defValue)
            {
                //如果为空则返回默认值
                if (string.IsNullOrEmpty(data))
                {
                    return defValue;
                }
    
                bool temp = false;
                if (bool.TryParse(data, out temp))
                {
                    return temp;
                }
                else
                {
                    return defValue;
                }
            }
    
    
            /// <summary>
            /// 将数据转换为布尔类型  转换失败返回 默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static bool ToBoolean(object data, bool defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToBoolean(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
    
            #endregion
    
            #region 将数据转换为单精度浮点型
    
    
            /// <summary>
            /// 将数据转换为单精度浮点型  转换失败 返回默认值
            /// </summary>
            /// <typeparam name="T">数据类型</typeparam>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static float ToFloat<T>(T data, float defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToSingle(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
            /// <summary>
            /// 将数据转换为单精度浮点型   转换失败返回默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static float ToFloat(object data, float defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToSingle(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
            /// <summary>
            /// 将数据转换为单精度浮点型   转换失败返回默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static float ToFloat(string data, float defValue)
            {
                //如果为空则返回默认值
                if (string.IsNullOrEmpty(data))
                {
                    return defValue;
                }
    
                float temp = 0;
    
                if (float.TryParse(data, out temp))
                {
                    return temp;
                }
                else
                {
                    return defValue;
                }
            }
    
    
            #endregion
    
            #region 将数据转换为双精度浮点型
    
    
            /// <summary>
            /// 将数据转换为双精度浮点型   转换失败返回默认值
            /// </summary>
            /// <typeparam name="T">数据的类型</typeparam>
            /// <param name="data">要转换的数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static double ToDouble<T>(T data, double defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToDouble(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
            /// <summary>
            /// 将数据转换为双精度浮点型,并设置小数位   转换失败返回默认值
            /// </summary>
            /// <typeparam name="T">数据的类型</typeparam>
            /// <param name="data">要转换的数据</param>
            /// <param name="decimals">小数的位数</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static double ToDouble<T>(T data, int decimals, double defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Math.Round(Convert.ToDouble(data), decimals);
                }
                catch
                {
                    return defValue;
                }
            }
    
    
    
            /// <summary>
            /// 将数据转换为双精度浮点型  转换失败返回默认值
            /// </summary>
            /// <param name="data">要转换的数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static double ToDouble(object data, double defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToDouble(data);
                }
                catch
                {
                    return defValue;
                }
    
            }
    
            /// <summary>
            /// 将数据转换为双精度浮点型  转换失败返回默认值
            /// </summary>
            /// <param name="data">要转换的数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static double ToDouble(string data, double defValue)
            {
                //如果为空则返回默认值
                if (string.IsNullOrEmpty(data))
                {
                    return defValue;
                }
    
                double temp = 0;
    
                if (double.TryParse(data, out temp))
                {
                    return temp;
                }
                else
                {
                    return defValue;
                }
    
            }
    
    
            /// <summary>
            /// 将数据转换为双精度浮点型,并设置小数位  转换失败返回默认值
            /// </summary>
            /// <param name="data">要转换的数据</param>
            /// <param name="decimals">小数的位数</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static double ToDouble(object data, int decimals, double defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Math.Round(Convert.ToDouble(data), decimals);
                }
                catch
                {
                    return defValue;
                }
            }
    
            /// <summary>
            /// 将数据转换为双精度浮点型,并设置小数位  转换失败返回默认值
            /// </summary>
            /// <param name="data">要转换的数据</param>
            /// <param name="decimals">小数的位数</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static double ToDouble(string data, int decimals, double defValue)
            {
                //如果为空则返回默认值
                if (string.IsNullOrEmpty(data))
                {
                    return defValue;
                }
    
                double temp = 0;
    
                if (double.TryParse(data, out temp))
                {
                    return Math.Round(temp, decimals);
                }
                else
                {
                    return defValue;
                }
            }
    
    
            #endregion
    
            #region 将数据转换为指定类型
            /// <summary>
            /// 将数据转换为指定类型
            /// </summary>
            /// <param name="data">转换的数据</param>
            /// <param name="targetType">转换的目标类型</param>
            public static object ConvertTo(object data, Type targetType)
            {
                if (data == null || Convert.IsDBNull(data))
                {
                    return null;
                }
    
                Type type2 = data.GetType();
                if (targetType == type2)
                {
                    return data;
                }
                if (((targetType == typeof(Guid)) || (targetType == typeof(Guid?))) && (type2 == typeof(string)))
                {
                    if (string.IsNullOrEmpty(data.ToString()))
                    {
                        return null;
                    }
                    return new Guid(data.ToString());
                }
    
                if (targetType.IsEnum)
                {
                    try
                    {
                        return Enum.Parse(targetType, data.ToString(), true);
                    }
                    catch
                    {
                        return Enum.ToObject(targetType, data);
                    }
                }
    
                if (targetType.IsGenericType)
                {
                    targetType = targetType.GetGenericArguments()[0];
                }
    
                return Convert.ChangeType(data, targetType);
            }
    
            /// <summary>
            /// 将数据转换为指定类型
            /// </summary>
            /// <typeparam name="T">转换的目标类型</typeparam>
            /// <param name="data">转换的数据</param>
            public static T ConvertTo<T>(object data)
            {
                if (data == null || Convert.IsDBNull(data))
                    return default(T);
    
                object obj = ConvertTo(data, typeof(T));
                if (obj == null)
                {
                    return default(T);
                }
                return (T)obj;
            }
            #endregion
    
            #region 将数据转换Decimal
    
            /// <summary>
            /// 将数据转换为Decimal  转换失败返回默认值
            /// </summary>
            /// <typeparam name="T">数据类型</typeparam>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static Decimal ToDecimal<T>(T data, Decimal defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToDecimal(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
    
            /// <summary>
            /// 将数据转换为Decimal  转换失败返回 默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static Decimal ToDecimal(object data, Decimal defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToDecimal(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
            /// <summary>
            /// 将数据转换为Decimal  转换失败返回 默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static Decimal ToDecimal(string data, Decimal defValue)
            {
                //如果为空则返回默认值
                if (string.IsNullOrEmpty(data))
                {
                    return defValue;
                }
    
                decimal temp = 0;
    
                if (decimal.TryParse(data, out temp))
                {
                    return temp;
                }
                else
                {
                    return defValue;
                }
            }
    
    
            #endregion
    
            #region 将数据转换为DateTime
    
            /// <summary>
            /// 将数据转换为DateTime  转换失败返回默认值
            /// </summary>
            /// <typeparam name="T">数据类型</typeparam>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static DateTime ToDateTime<T>(T data, DateTime defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToDateTime(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
    
            /// <summary>
            /// 将数据转换为DateTime  转换失败返回 默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static DateTime ToDateTime(object data, DateTime defValue)
            {
                //如果为空则返回默认值
                if (data == null || Convert.IsDBNull(data))
                {
                    return defValue;
                }
    
                try
                {
                    return Convert.ToDateTime(data);
                }
                catch
                {
                    return defValue;
                }
            }
    
            /// <summary>
            /// 将数据转换为DateTime  转换失败返回 默认值
            /// </summary>
            /// <param name="data">数据</param>
            /// <param name="defValue">默认值</param>
            /// <returns></returns>
            public static DateTime ToDateTime(string data, DateTime defValue)
            {
                //如果为空则返回默认值
                if (string.IsNullOrEmpty(data))
                {
                    return defValue;
                }
    
                DateTime temp = DateTime.Now;
    
                if (DateTime.TryParse(data, out temp))
                {
                    return temp;
                }
                else
                {
                    return defValue;
                }
            }
    
            #endregion
    
            #region 半角全角转换
            /// <summary>
            /// 转全角的函数(SBC case)
            /// </summary>
            /// <param name="input">任意字符串</param>
            /// <returns>全角字符串</returns>
            ///<remarks>
            ///全角空格为12288,半角空格为32
            ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
            ///</remarks>
            public static string ConvertToSBC(string input)
            {
                //半角转全角:
                char[] c = input.ToCharArray();
                for (int i = 0; i < c.Length; i++)
                {
                    if (c[i] == 32)
                    {
                        c[i] = (char)12288;
                        continue;
                    }
                    if (c[i] < 127)
                    {
                        c[i] = (char)(c[i] + 65248);
                    }
                }
                return new string(c);
            }
    
    
            /// <summary> 转半角的函数(DBC case) </summary>
            /// <param name="input">任意字符串</param>
            /// <returns>半角字符串</returns>
            ///<remarks>
            ///全角空格为12288,半角空格为32
            ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
            ///</remarks>
            public static string ConvertToDBC(string input)
            {
                char[] c = input.ToCharArray();
                for (int i = 0; i < c.Length; i++)
                {
                    if (c[i] == 12288)
                    {
                        c[i] = (char)32;
                        continue;
                    }
                    if (c[i] > 65280 && c[i] < 65375)
                        c[i] = (char)(c[i] - 65248);
                }
                return new string(c);
            }
            #endregion
        }
  • 相关阅读:
    学习官方示例 System.Assigned
    用 TBytesStream 类实现的读文件为十六进制字符的函数
    学习官方示例 System.Hi、System.Lo
    给 TComboBox 添加图标 回复 "heyongan" 的问题
    [每周特惠]WPF编程(第二版) + 设计模式—基于C#的工程化实现及扩展
    【公告】8月28日(周六)早上5:007:00服务器升级
    【网站公告】新Web服务器上线
    欢迎参加上海张江浦东软件园以及分园的技能培训课程
    上周热点回顾(8.309.5)
    上周热点回顾(8.168.22)
  • 原文地址:https://www.cnblogs.com/damsoft/p/6100731.html
Copyright © 2020-2023  润新知