C#中关于进制的一些知识点

作者 the7
发布于 2020年01月12日
评论 0
浏览 277

C#中如何定义

生活中常见的是10进制,计算机领域常见的有2进制、8进制、16进制,C#中定义方法如下。

int num1 = 0b00000001; //2进制
int num2 = 0xF;//16进制
int num3 = 100;//10进制
int num4 = ???;//8进制C#里表示不了

C#内置进制转换

用 c# 内置的 Convert.ToInt32("数字",进制) 可以将10进制转成(2、6、8、16)进制。如 Convert.ToInt32("12",8) ,将"12"转为8进制,结果为10。

如何自定义进制转换

简单点说,就是逢X进1。假如定义一个12进制,对应关系是这样

0 1 2 3 4 5 6 7 8 9 10 11 //10进制
0 1 2 3 4 5 6 7 8 9 X   Y //12进制 ,不一定要A,B表示

那么12进制的1X,就等于10进制的22。除了0-9,其实a-z 、A-Z、甚至其他特殊符号都可以拿来代表一个数字,前提是你的应用要能识别。这里简单定义一个[0-9 a-z A-Z]的字符串。

private static List<char> CHARS = Enumerable.Range(48, 10).Union(Enumerable.Range(65, 26)).Union(Enumerable.Range(97, 26)).Select(t => (char)t).ToList();

(adsbygoogle)

10进制转任意进制

public static string ToAnyBase(long num, int @base)
{
    long temp = num;
    string result = "";
    while (temp != 0)
    {
        long mod = temp % @base;
        temp = temp / @base;
        result = CHARS[(int)mod] + result;
    }
    return result;
}

从任意进制还原成10进制

public static long FromAnyBase(string str, int @base)
{
    if (string.IsNullOrEmpty(str)) return 0;
    return (long)str.Reverse().Select((s, i) => (CHARS.IndexOf(s)) * Math.Pow(@base, i)).Sum();
}

进制转换的一些应用

  • 颜色值

通常web上用RGB表示色值,分别取值在0-255,如果不用16进制,表示白色可能就是 255255255 ,用16进制 FFFFFF来表示,看上去要短一点,也好记一点。

  • 短网址

不管是微博、短信、百度评论里都有字数限制,长网址不利于推广,所以这里可以利用一下进制转换,将长网址存入数据库,得到一个自增ID,比如是8205414564,再转为62进制8xJ5AC,最后的网址可能是这样 t.cn/8xJ5AC 用户点击后,系统拿到8xJ5AC,再转为10进制,从数据库取出长网址进行301跳转。

  • 简单加密

其实算不上加密,只是简单把10进制升级一下,防止系统出现连续ID,比如百度网盘事件。

0条评论

请先登录后发表评论
提交评论
标签云
css (1) less calc (1) C# (4) C#进制转换 (1) asp.net core (8) Authentication (1) 注销 (1) 登录 (1) 验证 (1) scroll-view (1) 微信小程序 (4) 滚动到底部 (1) StackExchange.Redis (1) google (1) 百度 (1) nginx (2) 大文件 (2) 微信小程序c#解密 (1) 微信小程序获取手机号 (1) openid (1) session_key (1) CDN (1) URL鉴权 (1) 阿里云 (1) async (1) await (1) 禁止下拉上滑效果 (1) Index类型 (1) Range类型 (1) dontent publish (1) dotnet publish在线生成器 (1) System.DrawingCore.GDIPlus报错 (1) centos (1) 中文字体 (1) SqlBulkCopy (1) SqlSugar (1) JWT (5) 认证 (3) RSA JWT (1) 非对称加密 (1) 写信 (1) 见字如面 (1) 优化建议 (2) 正确操作字符串 (1) Java (1) JWT退出 (1) RefreshToken (1) .NET Core网站开发框架 (1) Moz (3) 墨子 (1) JSON.NET (1) Newtonsoft (1) System.Text.Json (1) 自定义后台路径 (1) .netcore (1) quartz (2) 作业调度框架 (1) 作业调度 (1) 定时任务 (1) exception (1) 异常处理 (1) HttpClient (1) IHttpClientFactory (1) RDM (1) Redis (1) Redis Desktop Manager (1) RedisDesktopManager (1) linux (1) mac (1) windows (1) Could not get any response (1) postman (1) leetcode (2) 力扣 (1) 回文字符串 (1) 面试刷题 (1) centos7 (1) php安装 (1) 网易云插件 (1) 马甲App (1) Discuz插件 (1) 网易云音乐 (1) Blazor (1) 五子棋 (1) c#解题 (1) 最长连续序列 (1) Swagger (1) 在线文档 (1) blob (1) mp4 (1) 视频 (1) big file (1) 上传 (1) s (1) Azure (1) Azure Key Vault (1) Configuration (1) 密钥保管库 (1) Dapper安装 (1) Dapper是什么 (1) Dapper连接Mysql (1) Dapper连接SqlServer (1) dapper (1)