试试下面的代码,可以把10进制转换为2~36之间的任意进制,也可以把2~36之间的任意进制数转成10进制。
百度勿吞!!!
public class NumberToNumber {
public static String[] arr = {"0","1","2","3","4","5","6","7","8",
"9","A","B","C","D","E","F","G","H",
"I","J","K","L","M","N","O","P","Q",
"R","S","T","U","V","W","X","Y","Z"};
public static String numbers = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public String tenToAll(int num,int base){
if(base < 2 || base > arrlength){
return StringvalueOf(num);
}
String result = "";
do{
result = arr[num%base] + result;
num = (num - num%base)/base;
}while(num/base != 0);
result = num==0result:arr[num] + result;
return result;
}
public int allToTen(String num,int base) throws Exception{
num = numtoUpperCase();
int d = 0;
int len = numlength();
for(int i=0;i<len;i++){
char sub = numcharAt(i);
int val = numbersindexOf(sub);
if(val == -1 || val > base){
throw new Exception();
}
d += val Mathpow(base, len - i - 1);
}
return d;
}
public static void main(String[] args) {
NumberToNumber n = new NumberToNumber();
try {
String num = "123322";
int result = nallToTen(num, 4);
Systemoutprintln(result);
Systemoutprintln(ntenToAll(result, 4));
} catch (Exception e) {
Systemerrprintln("非法数字!");
}
}
}
Java程序:
public class Main {public static void main(String[] args) {
int num = 1234;
Systemoutprintln("十进制:" + num);
Systemoutprintln("二进制:" + IntegertoBinaryString(num));
Systemoutprintln("八进制:" + IntegertoOctalString(num));
Systemoutprintln("十六进制:" + IntegertoHexString(num));
Systemoutprintln();
String str = "10011010010";
Systemoutprintf("二进制:%s\t十进制:%d\n", str, IntegerparseInt(str, 2));
str = "2322";
Systemoutprintf("八进制:%s\t\t十进制:%d\n", str, IntegerparseInt(str, 8));
str = "4D2";
Systemoutprintf("十六进制:%s\t\t十进制:%d\n", str, IntegerparseInt(str, 16));
}
}
运行测试:
十进制:1234二进制:10011010010
八进制:2322
十六进制:4d2
二进制:10011010010 十进制:1234
八进制:2322 十进制:1234
十六进制:4D2 十进制:1234
java十六进制转换为2进制示例如下:
public class Hex2Binary{
public static void main(String[] args)
{
String hexString = "ABCD";
Systemoutprintln(hexString2binaryString(hexString));
}
public static String hexString2binaryString(String hexString)
{
if (hexString == null || hexStringlength() % 2 != 0)
return null;
String bString = "", tmp;
for (int i = 0; i < hexStringlength(); i++)
{
tmp = "0000"
+ IntegertoBinaryString(IntegerparseInt(hexString
substring(i, i + 1), 16));
bString += tmpsubstring(tmplength() - 4);
}
return bString;
}
}
1、写转换函数是必须的,目前Jdk中无现有类。
2、在不同的字符编码当中,汉字的对应的数值或者说编码值不一样,像GBK、Unicode肯定是不一样的。以Java默认的Unicode为例说明问题。
3、 一,得到字符串,
二,遍历每个字符,用char来接收,实为int值,或直接用int也可以。
三,IntegertoHexString(每个字符对应的int值);
四,前缀加个“0x”就可以了。
4、如果是其它类型的话,找到对应的字符和数值对应表就可以了。
不知可否解决问题了。
给你写好了 懒得下swing控件 手写了一个 临时写的有点乱
十转二用内置函数 二转十是自己写的过程 你也可以仿照我的写法把十转二改成过程
package erjinzhi;import javaawt;
import javaawtevent;
public class erjinzhi_test extends Frame implements ActionListener{
Button tentotwo;
Button twototen;
Label l1;
Label l2;
Label l3;
Label l4;
Label l5;
TextField ten;
TextField two;
TextField ten1;
TextField two1;
Panel shang;
Panel zhong;
Panel xia;
Panel shang1;
Panel shang2;
Panel shang3;
Panel xia1;
Panel xia2;
Panel xia3;
public erjinzhi_test(){
tentotwo = new Button("十进制转二进制");
twototen = new Button("二进制转十进制");
ten = new TextField();
two = new TextField();
ten1 = new TextField();
two1 = new TextField();
l1 = new Label("十进制");
l2 = new Label("二进制");
l3 = new Label("进制转换工具");
l4 = new Label("十进制");
l5 = new Label("二进制");
shang = new Panel(new GridLayout(3,1));
shang1 = new Panel(new GridLayout(1,2));
shang1add(l1);
shang1add(ten);
shangadd(shang1);
shang3 = new Panel();
shang3add(tentotwo);
shangadd(shang3);
shang2 = new Panel(new GridLayout(1,2));
shang2add(l2);
shang2add(two);
shangadd(shang2);
thisadd(shang,BorderLayoutNORTH);
zhong = new Panel();
zhongadd(l3);
thisadd(zhong,BorderLayoutCENTER);
xia = new Panel(new GridLayout(3,1));
xia1 = new Panel(new GridLayout(1,2));
xia1add(l5);
xia1add(two1);
xiaadd(xia1);
xia3 = new Panel();
xia3add(twototen);
xiaadd(xia3);
xia2 = new Panel(new GridLayout(1,2));
xia2add(l4);
xia2add(ten1);
xiaadd(xia2);
thisadd(xia,BorderLayoutSOUTH);
thissetResizable(false);
thissetSize(280, 260);
thissetLocation(350, 100);
thissetTitle("进制转换工具");
thissetVisible(true);
tentotwoaddActionListener(this);
twototenaddActionListener(this);
}
public static void main(String[] args) {
new erjinzhi_test();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(egetSource()==tentotwo){
int number =IntegerparseInt(tengetText());
twosetText(IntegertoBinaryString(number));
}
if(egetSource()==twototen){
String str = two1getText();
String st[] = new String[strlength()];
st = strsplit("");
int len =strlength();
int sum=0;
int t=1;
for(int i=len;i>=1;i--){
int s =IntegerparseInt(st[i])t;
t=t2;
sum=s+sum;
}
String summ=sum+"";
ten1setText(summ);
}
}
}
java将二进制装换成整数,可以使用Integer类的方法,来进行转换,如下:
IntegerparseInt("80000000",2);Integer属于int基本类型的包装类,可以实现各个类型的互相转换,还可以输出成string类型,只需要使用toString()方法。
嗯首先我很好奇你们的后台为什么需要处理2进制数这个事机器所理解的程序就是为了模拟人的思维进行逻辑处理为何你需要模拟电脑的思维进行处理呢若是加解密那我就不多说了若不是那么后台的代码的接受参数是什么String还是其他的对象当然肯定不是int也不是long二进制的话我想不到是什么了
可以参考一下Integer对象中的方法吧
IntegerparseInt(String s, 2)
javalangInteger这个API包中有进制转换的函数
public static String toBinaryString(int i)
public static String toHexString(int i)
public static String toOctalString(int i)
这3个函数都可以将十进制的整数转换成二、一六、八进制数
不过转换后的结果都是字符串的形式
既然得到的是字符串
我想你当然就可以利用stringsub(x-1,x)的方法来判断该x位的数等于0还是1
之后再把x返回出来,那么就知道结果了
需要这么做么,如果你愿意,你就可以直接把1个10进制的数当作2进制来看待的
判断他某几位是不是0可以用掩码的方法:
比如:
判断10进制10的第2位是不是1,可以用 10 & 2 是否等于0来得到,等于0,该位不是1,否则该位是1,
原理, 10和2的2进制代码是:
1010 & 0010 = 0010 != 0
所以10的第2位是1,
依次类推,用10&4去判断第3位是不是1
用6判断第2位和第3位是不是同时为1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)