C#利用字符串方法把八进制数转换为十六进制数

        /// <summary>

        /// 将8进制数转换成16进制数

        /// </summary>

        /// <param name="convertFrom">八进制数</param>

        /// <returns>十六进制数</returns>

        private string ConvertNumber8To16(string convertFrom)

        {

            string check = convertFrom.Replace("0", string.Empty).Replace("1", string.Empty).Replace("2", string.Empty).Replace("3", string.Empty).Replace("4", string.Empty).Replace("5", string.Empty).Replace("6", string.Empty).Replace("7", string.Empty);

            if (check.Length > 0)

            {

                //errorHandle

                return string.Empty;

            }

            string convertTo=string.Empty, convertTo2;//目标数convertTo:将八进制From转换成进制To,

            //convertTo2:选转换成进制数,再转换成十六进制数

            convertTo2 = ConvertNumber8To2(convertFrom);//先转化为二进制

            convertTo = ConvertNumber2To16(convertTo2);

            return convertTo;

        }

        /// <summary>

        /// 将8进制转换为2进制

        /// </summary>

        /// <param name="convertFrom">八进制数</param>

        /// <returns>二进制数</returns>

        private string ConvertNumber8To2(string convertFrom)

        {

            string check = convertFrom.Replace("0", string.Empty).Replace("1", string.Empty).Replace("2", string.Empty).Replace("3", string.Empty).Replace("4", string.Empty).Replace("5", string.Empty).Replace("6", string.Empty).Replace("7", string.Empty);

            if (check.Length > 0)

            {

                //errorHandle

                return string.Empty;

            }

            string convertTo = string.Empty, bit;

            for (int i = convertFrom.Length - 1; i >= 0; i--)

            {

                bit = convertFrom.Substring(i, 1);

                switch (bit)

                {

                    case "0":

                        convertTo = "000" + convertTo;

                        break;

                    case "1":

                        convertTo = "001" + convertTo;

                        break;

                    case "2":

                        convertTo = "010" + convertTo;

                        break;

                    case "3":

                        convertTo = "011" + convertTo;

                        break;

                    case "4":

                        convertTo = "100" + convertTo;

                        break;

                    case "5":

                        convertTo = "101" + convertTo;

                        break;

                    case "6":

                        convertTo = "110" + convertTo;

                        break;

                    case "7":

                        convertTo = "111" + convertTo;

                        break;

                }

            }

            return convertTo;

        }

        /// <summary>

        /// 将2进制转换为16进制

        /// </summary>

        /// <param name="convertFrom">二进制数</param>

        /// <returns>十六进制数</returns>

        private string ConvertNumber2To16(string convertFrom)

        {

            string check = convertFrom.Replace("0", string.Empty).Replace("1", string.Empty);

            if (check.Length > 0)

            {

                //errorHandle

                return string.Empty;

            }

            string convertTo = string.Empty, bit;

            int residue,temp = 0;

            for (int i = convertFrom.Length - 4; i >= 0; i-=4)

            {

                bit = convertFrom.Substring(i, 4);//每次减四

                switch (bit)

                {

                    case "0000":

                        convertTo = "0" + convertTo;

                        break;

                    case "0001":

                        convertTo = "1" + convertTo;

                        break;

                    case "0010":

                        convertTo = "2" + convertTo;

                        break;

                    case "0011":

                        convertTo = "3" + convertTo;

                        break;

                    case "0100":

                        convertTo = "4" + convertTo;

                        break;

                    case "0101":

                        convertTo = "5" + convertTo;

                        break;

                    case "0110":

                        convertTo = "6" + convertTo;

                        break;

                    case "0111":

                        convertTo = "7" + convertTo;

                        break;

                    case "1000":

                        convertTo = "8" + convertTo;

                        break;

                    case "1001":

                        convertTo = "9" + convertTo;

                        break;

                    case "1010":

                        convertTo = "A" + convertTo;

                        break;

                    case "1011":

                        convertTo = "B" + convertTo;

                        break;

                    case "1100":

                        convertTo = "C" + convertTo;

                        break;

                    case "1101":

                        convertTo = "D" + convertTo;

                        break;

                    case "1110":

                        convertTo = "E" + convertTo;

                        break;

                    case "1111":

                        convertTo = "F" + convertTo;

                        break;

                }

            }           

            residue = convertFrom.Length % 4;//求余数

            if (residue != 0)

            {

                for (int i = 0; i < residue; i++)

                {

                    temp += Convert.ToInt32(convertFrom.Substring(i, 1))

                        * Convert.ToInt32(Math.Pow(2, residue - i - 1));

                }

            }

            if (temp != 0)

            {

                convertTo = temp.ToString() + convertTo;

            }

            return convertTo;

        }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值