1. 程式人生 > >C# 處理資料型別轉換幫助類

C# 處理資料型別轉換幫助類

using System;
using System.Text;

namespace DotNet.Utilities
{
    /// <summary>
    /// 處理資料型別轉換,數制轉換、編碼轉換相關的類
    /// </summary>    
    public sealed 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
            {

                //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
                return "0";
            }
        }
        #endregion

        #region 使用指定字符集將string轉換成byte[]
        /// <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>
        /// <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


    }
}