java 实现N进制转M进制
1. 把10进制转成N进制:除N取余,逆序排列
这里逆序排列使用StringBuilder类的reverse()函数来实现。
- /**
- * 10进制整数转换为N进制整数。 10进制转换为N进制的方法是:这个10进制数除以N,求出余数,并把余数倒叙排列。 除N取余,倒叙排列
- * @param tenRadix
- * 十进制整数
- * @param radix
- * 要转换的进制数,例如,要转成2进制数,radix就传入2
- * @return radix进制的字符串
- */
- public static String string10ToN(int tenRadix, int radix)
- {
- // 进制编码支持9+26=35进制
- String code = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- StringBuilder buf = new StringBuilder();
- int remainder = 0;
- while (tenRadix != 0)
- {
- remainder = tenRadix % radix;// 求余数
- tenRadix = tenRadix / radix;// 除以基数
- buf.append(code.charAt(remainder));// 保存余数,记得要倒叙排列
- }
- buf.reverse();// 倒叙排列
- return buf.toString();
- }
2.把N进制数转成10进制数:按权展开
(1)这里的权就是N的ex次幂,例如2进制:1110=1*2^3+1*2^2+1*2^1+0*2^0 =8+4+2+0=14
所以这里需要一个求x的ex次幂的方法,这里用一个自定义的方法:
- /**
- * 返回x的ex次幂。
- * @param x
- * 底数
- * @param ex
- * 幂指数
- * @return x的ex次幂
- */
- public static int pow(int x, int ex)
- {
- int result = 1;
- for (int i = 0; i < ex; i++)
- {
- result *= x;
- }
- return result;
- }
当然也可以使用Math.pow()方法
下面是N进制转10进制的按权展开的方法:
- /**
- * 返回N进制对应的10进制数。
- *
- * @param N_num
- * N进制数
- * @param radix
- * N进制计数
- * @return N进制数对应的10进制数
- */
- public static int stringNTo10(String N_num, int radix)
- {
- StringBuilder stringBuilder = new StringBuilder(N_num);
- stringBuilder.reverse();// 反转字符,为了把权重最大的放在最右边,便于下面从左到右遍历,根据下标求权重。
- //如果不反转,从右向左遍历(从字符串下标大的一端)也可以
- char bitCh;
- int result = 0;
- for (int i = 0; i < stringBuilder.length(); i++)
- {
- bitCh = stringBuilder.charAt(i);
- if (bitCh >= '0' && bitCh <= '9')
- {
- // '0'对应的ASCII码整数:48
- result += (int) (bitCh - '0') * pow(radix, i);
- } else if (bitCh >= 'A' && bitCh <= 'Z')
- {
- // 减去'A'的ASCII码值(65),再加上10
- result += ((int) (bitCh - 'A') + 10) * pow(radix, i);
- } else if (bitCh >= 'a' && bitCh <= 'z')
- {
- // 减去'a'的ASCII码值(97),再加上10
- result += ((int) (bitCh - 'a') + 10) * pow(radix, i);
- }
- }
- return result;
- }
有了这两个核心的方法,其他的方法如十进制转2进制,十进制转8进制,十进制转16进制。N进制转M进制都可调用上面的两个方法来实现了:
3.N进制转M进制方法:
- /**
- * 把nRadix进制数nRadixNum转换为m进制数字符串并返回。
- * 具体做法是先把nRadix的nRadixNum转换成10进制数,然后再把这个10进制数转换成mRadix进制数。
- *
- * @param nRadixNum
- * n进制数
- * @param nRadix
- * n进制的基数
- * @param mRadix
- * 要转成的进制数基数m
- * @return m进制数字符串
- */
- public static String stringNToM(String nRadixNum, int nRadix, int mRadix)
- {
- return string10ToN(stringNTo10(nRadixNum, nRadix), mRadix);
- }
4.10进转2进制,10进制转8进制,10进制转16进制,调用十进制转N进制方法即可
- public static String string10To2(int tenRadixNum)
- {
- return string10ToN(tenRadixNum, 2);
- }
- public static String string10To8(int tenRadixNum)
- {
- return string10ToN(tenRadixNum, 8);
- }
- public static String string10To16(int tenRadixNum)
- {
- return string10ToN(tenRadixNum, 16);
- }
5.同理2进制转10进制,8进制转10进制,16进制转10进制,也只要调用N进制转10进制的方法即可,这里不再累赘。
6.整个代码:
- package lan.java.jinzhizhuanhuan;
- public class TheMoronicCowmpouter
- {
- public static void main(String[] args)
- {
- String HexNum = "f9";
- System.out.println(
- "16进制数:" + HexNum + "对应的2 进制数:" + stringNToM(HexNum, 16, 2));
- System.out.println(
- "16进制数:" + HexNum + "对应的10进制数:" + string16To10(HexNum));
- System.out.println(
- "16进制数:" + HexNum + "对应的32进制数:" + stringNToM(HexNum, 16, 32));
- }
- /**
- * 返回N进制对应的10进制数。
- *
- * @param N_num
- * N进制数
- * @param radix
- * N进制计数
- * @return N进制数对应的10进制数
- */
- public static int stringNTo10(String N_num, int radix)
- {
- StringBuilder stringBuilder = new StringBuilder(N_num);
- stringBuilder.reverse();// 反转字符
- char bitCh;
- int result = 0;
- for (int i = 0; i < stringBuilder.length(); i++)
- {
- bitCh = stringBuilder.charAt(i);
- if (bitCh >= '0' && bitCh <= '9')
- {
- // '0'对应的ASCII码整数:48
- result += (int) (bitCh - '0') * pow(radix, i);
- } else if (bitCh >= 'A' && bitCh <= 'Z')
- {
- // 减去'A'的ASCII码值(65),再加上10
- result += ((int) (bitCh - 'A') + 10) * pow(radix, i);
- } else if (bitCh >= 'a' && bitCh <= 'z')
- {
- // 减去'a'的ASCII码值(97),再加上10
- result += ((int) (bitCh - 'a') + 10) * pow(radix, i);
- }
- }
- return result;
- }
- public static int string2To10(String tenRadixNum)
- {
- return stringNTo10(tenRadixNum, 2);
- }
- public static int string8To10(String tenRadixNum)
- {
- return stringNTo10(tenRadixNum, 8);
- }
- public static int string16To10(String tenRadixNum)
- {
- return stringNTo10(tenRadixNum, 16);
- }
- /**
- * 返回x的ex次幂。
- *
- * @param x
- * 底数
- * @param ex
- * 幂指数
- * @return x的ex次幂
- */
- public static int pow(int x, int ex)
- {
- int result = 1;
- for (int i = 0; i < ex; i++)
- {
- result *= x;
- }
- return result;
- }
- /**
- * 10进制整数转换为N进制整数。 10进制转换为N进制的方法是:这个10进制数除以N,求出余数,并把余数倒叙排列。 除N取余,倒叙排列
- *
- * @param tenRadix
- * 十进制整数
- * @param radix
- * 要转换的进制数,例如,要转成2进制数,radix就传入2
- * @return radix进制的字符串
- */
- public static String string10ToN(int tenRadix, int radix)
- {
- // 进制编码支持9+26=35进制
- String code = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- StringBuilder buf = new StringBuilder();
- int remainder = 0;
- while (tenRadix != 0)
- {
- remainder = tenRadix % radix;// 求余数
- tenRadix = tenRadix / radix;// 除以2
- buf.append(code.charAt(remainder));// 保存余数,记得要倒叙排列
- }
- buf.reverse();// 倒叙排列
- return buf.toString();
- }
- public static String string10To2(int tenRadixNum)
- {
- return string10ToN(tenRadixNum, 2);
- }
- public static String string10To8(int tenRadixNum)
- {
- return string10ToN(tenRadixNum, 8);
- }
- public static String string10To16(int tenRadixNum)
- {
- return string10ToN(tenRadixNum, 16);
- }
- /**
- * 把nRadix进制数nRadixNum转换为m进制数字符串并返回。
- * 具体做法是先把nRadix的nRadixNum转换成10进制数,然后再把这个10进制数转换成mRadix进制数。
- *
- * @param nRadixNum
- * n进制数
- * @param nRadix
- * n进制的基数
- * @param mRadix
- * 要转成的进制数基数m
- * @return m进制数字符串
- */
- public static String stringNToM(String nRadixNum, int nRadix, int mRadix)
- {
- return string10ToN(stringNTo10(nRadixNum, nRadix), mRadix);
- }
- }
运行结果:
- 16进制数:f9对应的2 进制数:11111001
- 16进制数:f9对应的10进制数:249
- 16进制数:f9对应的32进制数:7P
这上面只支持到9+26=35进制以内的整数之间的进制相互转换,大于35进制的我不方便符号化就算了,知道进制转换的原理就行了,主要是10进制转N进制,以及N进制转10进制这两个重要的转换方法。
java 实现N进制转M进制的更多相关文章
- [置顶] JAVA概述(6)常量,关键字,进制转换
21.关键字.... 变量: 就是将不确定的数据进行存储.也就是需要在内粗恩中开辟一个空间. 整数类型 1个字节 byte 占 8位 -128~~~127 2 ...
- java 将数字转成成16进制
java 将数字转成成16进制 CreationTime--2018年6月11日17点11分 Author:Marydon 1.前提 数字必须是byte类型,即[-128,127] 2.代码实现 ...
- java中16进制转换10进制
java中16进制转换10进制 public static void main(String[] args) { String str = "04e1"; String myStr ...
- java程序练习:x进制转Y进制
/*X进制到Y进制转换*/ /*Step1.提示用户输入数据的进制X *Step2.接收用户输入的数据,保存到X * Scanner方法 *Step3.接收用户输入X进制的数据,保存到num *Ste ...
- 16进制转10进制 HDU-1720
A+B Coming Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【九度OJ】题目1208:10进制 VS 2进制 解题报告
[九度OJ]题目1208:10进制 VS 2进制 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1208 题目描述: 对于一 ...
- 16进制字符串和byte数组进行相互转换\将10进制转换为任意进制
16进制字符串和byte数组进行相互转换 简介 1个byte对应8个bit,16进制使用4个bit,所以一个byte转成16进制,占用两位. JAVA代码 private static final c ...
- C++ 中 int 转string, 以及10进制转2进制
感谢:http://blog.csdn.net/xiaofei2010/article/details/7434737 以及:http://www.cnblogs.com/nzbbody/p/3504 ...
- JS-011-颜色进制转换(RGB转16进制;16进制转RGB)
在网页开发的时候,经常需要进行颜色设置,因而经常需要遇到进行颜色进制转换的问题,例如:RGB转16进制:16进制转RGB),前几天在测试的时候,发现网站的颜色进制转换某类16进制颜色(例如:#0000 ...
- js用8421码实现10进制转2进制
今天早上突然心血来潮决定用 ''和js来撸一个进制转换.(纯属心血来潮,有兴趣的可以看看.) 我们知道,通过8421码.可以快速的得到一个10进制的2进制.如下图: 如上图所示:我们将10进制的 '1 ...
随机推荐
- 如何判断 js 的数据类型
js 数据类型 一共 7 种 undefined . null . number . string . boolean .object . symbol 其中 object 可以细分 位 数组对象 ...
- 43.v-if和v-for的优先级
v-for 的优先级高 延申问题:v-for 和 v-if 为什么不能在一起使用 ? 会造成性能的浪费,因为v-for 的优先级高,所以每次渲染都会执行v-if 判断条件,浪费时间 :比如 渲染 10 ...
- prometheus+grafana配置流程
prometheus+grafana配置流程 首先,安装对应的exporter 查看prometheus支持的所有exporters https://prometheus.io/docs/instru ...
- 【异常处理】Assistive Technology not found: com.sun.java.accessibility.AccessBridge
十一回来之后,工作电脑上的抓包工具Charles突然启动不起来了,双击图标后,一闪而过,就没动静了. 不知道是不是因为之前安装了什么工具.软件引起的. 打开CMD命令行,跳转到目录下启动,提示:Ass ...
- ToDesk云电脑游戏数量?高性能显卡云桌面
玩游戏最怕遇到电脑配置跟不上,操作卡成狗不说,画面还一卡卡的,游戏体验极差. 最近被人安利了ToDesk的云电脑,可能是刚推出的,配置价格都很能打,浅用了一波拿来打APEX和荒野大镖客,体验有点惊喜到 ...
- OpenCv Mat 数据结构
前言 OpenCv的Mat数据结构可以存储图片信息.但是以坐标系构建来说,Mat是以左上角为原点,而我们自己的日常习惯是以左下角为原点. 本文提供了这两者之间的一种转换. 假设 Mat : (x,y) ...
- Python面相对象的编程
文章目录 1.基本概念 2.常用方法及代码实现 1.基本概念 Python的面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它使用"对象&q ...
- KNN算法:近朱者赤,近墨者黑
文章目录 1.一个例子 2.算法原理 3.算法的优缺点 3.关于 K 的选取 4.代码实现 今天我要讲的这个算法是最近邻算法(K-NearestNeighbor),简称 KNN 算法. 1.一个例子 ...
- git 拉取或者推送代码报错问题解决
报错截图: 当推送远程时,提示无法访问github地址 原因:在拉取或者是提交项目时,会发生git的http和https代理,我们电脑本地已经存在SSL协议的协议,可以取消http和https代理 在 ...
- 2024-2025, 四大翻译工具加AI翻译的深度对比
前言 在过去两年中,人工智能技术的迅猛发展对翻译工具产生了深远的影响. 本期特意挑选了四款翻译工具以及一个AI翻译工具, 对其性能进行评测,看看在AI技术的加持下,它们的质量提升如何. 以下是参赛选手 ...