C#进制那点事儿

程序员干了两年了,前两天跟朋友聊天,他说去金山面试,面试官问他2的32次方是多少?16次方?竟然答不上来,我想了想,自己也答不上来,这程序员当的不合格啊。正好自己写了一个小爬虫,想遍历所有url参数(有点low),参数不带特殊字符只有数字和字母,所以想借此机会搞个62进制出来,先介绍基础进制

二,八,十,十六进制

直接转换

参考链接:https://www.cnblogs.com/hitfredrick/p/6403003.html
####十六进制转换为二进制(int–>string)

例:System.Convert.ToString(i, 2);// i为int类型 以0X14为例,输出为10100

间接转换

其他进制转十进制

十进制是人类使用的基础,最容易理解的类型了,其他进制间转换也可以先转十进制然后在转为目标进制
利用System.Convert.ToInt32(s, n);可以将其他进制转换为十进制
例如二进制转十进制:
System.Convert.ToInt32(s, 2);// d为string类型 以“1010”为例,输出为10
十六进制转十进制
System.Convert.ToInt32(“0x41”, 16);//以"0x41"为例,输出为65

十进制转其他进制

使用int的toString()函数,在括号中不同的参数可以对应转不同进制

转二进制

System.Convert.ToString(d, 2);// d为int类型 以4为例,输出为100

转十六进制

123456789.ToString(“X”)
或者
System.Convert.ToString(i, 16);

其他进制

十进制转其他进制

参考了一点大神的代码:http://www.cnblogs.com/edisonchou/p/4620027.html
然后使用的C#自带栈

        /// <summary>
        /// 十进制转其他进制
        /// 只支持16进制及以下
        /// </summary>
        /// <param name="num">十进制数</param>
        /// <param name="dec">要转的进制</param>
        /// <returns></returns>
        public string ConvertNum(int num, int dec)
        {
            if (dec < 2 || dec > 16)
            {
                throw new ArgumentOutOfRangeException("dec", "只支持将十进制数转换为二进制到十六进制数");
            }

            Stack<char> stack = new Stack<char>();
            int residue;
            // 余数入栈
            while (num != 0)
            {
                residue = num % dec;
                if (residue >= 10)
                {
                    // 如果是转换为16进制且余数大于10则需要转换为ABCDEF
                    residue = residue + 55;
                }
                else
                {
                    // 转换为ASCII码中的数字型字符1~9
                    residue = residue + 48;
                }
                stack.Push((char)residue);
                num = num / dec;
            }
            // 反序出栈
            string result = string.Empty;
            while (stack.LongCount() > 0)
            {
                result += stack.Pop();
            }

            return result;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值