二进制转换的算法? 如题怎么实现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是完整的进制转换的代码:java实现的:import java.util.Stack;public class Base{ /** * 将数转为任意进制 * * @param num 10进制数 * @param base 目标进制 * @return */ public static String baseString(int num, int base) { System.out.println("+++++++"+num); if (base > 16) { throw new RuntimeException("进制数超出范围,base<=16"); } StringBuffer str = new StringBuffer(""); String digths = "0123456789ABCDEF"; Stack<Character> s = new Stack<Character>(); System.out.println(num != 0); while (num != 0) { //charAt返回指定索引处的 char 值 s.push(digths.charAt(num % base)); /** * 近来的num永远是十进制数因为不是十进制也在方法 * baseNum(String num, int srcBase, int destBase) * 转成了十进制了 * 此算法的精髓在于就像我们把十进制的数转换成如二进制: * 十进制数num=16转成二进制就是16%2求余数把16/2的数再保存到num中。循环直到num=0就可以求出 * 二进制后的数 */ num /= base; } while (!s.isEmpty()) { str.append(s.pop()); } return str.toString(); } /** * 16进制内任意进制转换 * * @param num 任意数字 * @param srcBase 原进制 * @param destBase 目标进制 * @return */ public static String baseNum(String num, int srcBase, int destBase) { if (srcBase == destBase) { return num; } String digths = "0123456789ABCDEF"; char[] chars = num.toCharArray(); int len = chars.length; if (destBase != 10) { //@@@ // 目标进制不是十进制 先转化为十进制 //此目的在于如要把二进制转成十六进制。则先把二进制转成十进制在调用 //baseString(Integer.valueOf(num), destBase)转成十六进制 递归 num = baseNum(num, srcBase, 10); System.out.println(num); } else { /** * 如果目标进制是十进制则直接把源进制转换成十进制不需要@@@的步骤 */ int n = 0; for (int i = len - 1; i >= 0; i--) { //pow()返回第一个参数的第二个参数次幂的值 n += digths.indexOf(chars[i]) * Math.pow(srcBase, len - i - 1); // (8,0) // (8,1) } return n + ""; } /** * valueOf * 返回保持指定的 String 的值的 Integer 对象。 * 将该参数解释为表示一个有符号的十进制整数, * 就好像将该参数赋予 parseInt(java.lang.String) 方法一样。 * 结果是一个表示字符串指定的整数值的 Integer 对象。 */ return baseString(Integer.valueOf(num), destBase); } public static void main(String[] args) { String s = baseNum("11111", 2,16); // 128+64+8 //s的十进制为5 System.out.println(s); }} 怎么样用java对集合内的对象排序 eclipse怎么改字符编码? 求:java中怎么用js swt真的这么难? 这么简单的程序都不工作!!! 两个不同Frame之间如何通讯啊? 请教:JavaSwing问题。 如何实现一个java程序使运行功能是关闭我的计算机 JBuilder7_Weblogic_Edition_EN的注册,高分相送! JBuilder 8.0 使用求教. 有谁知道在linux下的jbuilder6的序列号和注册信息?????? 求助!!Swing 如何旋转所画的图形 [讨论]java - SEO 顶者有份,可追加
java实现的:import java.util.Stack;public class Base
{
/**
* 将数转为任意进制
*
* @param num 10进制数
* @param base 目标进制
* @return
*/
public static String baseString(int num, int base)
{
System.out.println("+++++++"+num);
if (base > 16)
{
throw new RuntimeException("进制数超出范围,base<=16");
}
StringBuffer str = new StringBuffer("");
String digths = "0123456789ABCDEF";
Stack<Character> s = new Stack<Character>();
System.out.println(num != 0);
while (num != 0)
{
//charAt返回指定索引处的 char 值
s.push(digths.charAt(num % base));
/**
* 近来的num永远是十进制数因为不是十进制也在方法
* baseNum(String num, int srcBase, int destBase)
* 转成了十进制了
* 此算法的精髓在于就像我们把十进制的数转换成如二进制:
* 十进制数num=16转成二进制就是16%2求余数把16/2的数再保存到num中。循环直到num=0就可以求出
* 二进制后的数
*/
num /= base;
}
while (!s.isEmpty())
{
str.append(s.pop());
}
return str.toString();
} /**
* 16进制内任意进制转换
*
* @param num 任意数字
* @param srcBase 原进制
* @param destBase 目标进制
* @return
*/
public static String baseNum(String num, int srcBase, int destBase)
{
if (srcBase == destBase)
{
return num;
}
String digths = "0123456789ABCDEF";
char[] chars = num.toCharArray();
int len = chars.length;
if (destBase != 10)
{
//@@@
// 目标进制不是十进制 先转化为十进制
//此目的在于如要把二进制转成十六进制。则先把二进制转成十进制在调用
//baseString(Integer.valueOf(num), destBase)转成十六进制 递归
num = baseNum(num, srcBase, 10);
System.out.println(num);
}
else
{
/**
* 如果目标进制是十进制则直接把源进制转换成十进制不需要@@@的步骤
*/
int n = 0;
for (int i = len - 1; i >= 0; i--)
{
//pow()返回第一个参数的第二个参数次幂的值
n += digths.indexOf(chars[i]) * Math.pow(srcBase, len - i - 1); // (8,0)
// (8,1)
}
return n + "";
}
/**
* valueOf
* 返回保持指定的 String 的值的 Integer 对象。
* 将该参数解释为表示一个有符号的十进制整数,
* 就好像将该参数赋予 parseInt(java.lang.String) 方法一样。
* 结果是一个表示字符串指定的整数值的 Integer 对象。
*/
return baseString(Integer.valueOf(num), destBase);
} public static void main(String[] args)
{
String s = baseNum("11111", 2,16); // 128+64+8
//s的十进制为5
System.out.println(s);
}
}