不调用integer类的任何方法,将二进制字符串转化成16进制字符串。如输入00101110,输出2F

不要给我发二进制转化为16进制的原理,也不要给我发调用integer类方法的解决办法和long类等其他相关java进行封装的字符串进制转换方法。我需要算法。谢谢~

第1个回答  2011-04-18
字符,比如char a='1' 就会输出1 ;但是 char a=1; 输出 a 就直接输出的 ASCII码 笑脸的符号,要输出1 就要这么写 cout<<a+1-1; 这么写就是将字符转换为 数字,输出结果为1; 但是此题输出的既有数字又有字符 所以就直接全用字符了 代码如下: */

#include<iostream>
using namespace std;
void convert(int num);
const max=16;
int main()
{
int x;
do
{
cout<<"请输入一个数:";
cin>>x;
convert(x);
}while(x!=0);
return 0;
}
void convert(int num)
{
char a[max];
int length=0;
while(num>0)
{
int temp=num%16;//put mod into array
num=num/16;
switch(temp)
{
case 0:a[length]='0';
break;
case 1:a[length]='1';
break;
case 2:a[length]='2';
break;
case 3:a[length]='3';
break;
case 4:a[length]='4';
break;
case 5:a[length]='5';
break;
case 6:a[length]='6';
break;
case 7:a[length]='7';
break;
case 8:a[length]='8';
break;
case 9:a[length]='9';
break;
case 10:a[length]='A';
break;
case 11:a[length]='B';
break;
case 12:a[length]='C';
break;
case 13:a[length]='D';
break;
case 14:a[length]='E';
break;
case 15:a[length]='F';
break;
}
length++;
}
cout<<"转化为16进制数为:";
for(int i=length-1;i>=0;i--)
{
cout<<a[i];
}
cout<<endl;
}
第2个回答  2011-04-23
package com;

public class TransBin {

public static void main(String[] args) {
String num = "00101110";
TransBin tb = new TransBin();
String s = tb.transBinToHex(num);
System.out.println(s);
}

public String transBinToHex(String str){
int len = str.length() / 4;
String res = "";
for(int i = 0;i < len;i++){
char[] ch = new char[4];
str.getChars(i * 4, i * 4 + 4, ch, 0);
res = res + switchS(trans1(ch));
}
return res;
}

public int trans1(char[] ch){
int sum = 0;
for(int i = 0;i < 4;i++){
int y = 8;
if(ch[i] == '1'){
for(int j = 1;j <= i;j++){
y = y / 2;
}
sum = sum + y;
}
}
return sum;
}
public String switchS(int i){
String s = "";
switch(i){
case 10:
s = "a";
break;
case 11:
s = "b";
break;
case 12:
s = "c";
break;
case 13:
s = "d";
break;
case 14:
s = "e";
break;
case 15:
s = "f";
default:
s = "" + i;
}
return s;
}

}本回答被提问者采纳
第3个回答  2011-04-18
public static void main(String args[]) {
String cs=args[0].trim();
int c[]=new int[cs.length()];
for(int i=0;i<c.length;i++){
c[i]=Integer.parseInt(cs.substring(i,i+1));
}
String s="";
for(int i=c.length-1;i>=0;i-=4){
int t=c[i]+c[i-1]*2+c[i-2]*4+c[i-3]*8;
if(t<=9){
s=t+s;
}else{
switch(t){
case 10:s="a"+s;break;
case 11:s="b"+s;break;
case 12:s="c"+s;break;
case 13:s="d"+s;break;
case 14:s="e"+s;break;
case 15:s="f"+s;break;
default: break;
}
}
}
System.out.println(args[0]+"十六进制:"+s);
追问

帅哥,我说了,不调用integer的任何方法~~

相似回答