冰楓論壇

 找回密碼
 立即註冊
查看: 328|回覆: 0

Java写的十六进制转十进制和Ascii工具

[複製鏈接]

17

主題

0

好友

15

積分

新手上路

Rank: 1

UID
126691
帖子
38
主題
17
精華
0
積分
15
楓幣
1
威望
15
存款
0
贊助金額
0
推廣
0
GP
16
閱讀權限
10
性別
保密
在線時間
5 小時
註冊時間
2016-1-20
最後登入
2018-12-18
發表於 2018-2-13 21:05:50 |顯示全部樓層

package com.packet;

import javax.naming.spi.DirStateFactory.Result;


/**
* 进制装换类
* @author Acer
*
*/
public class ConvertSystem {

/**
  * 二进制
  */
private static final int DECIMAL=2;

/**
  * 十六进制所占的二进制位数为4位
  */
private static final int SIZE=4;

/*
  * 设置十六进制字符对应的十进制数枚举
  */
private enum SexaEnum{ A(10), B(11), C(12), D(13), E(14), F(15);
  private final int number;
  private SexaEnum(int number) {
   this.number = number;
  }
  public int get(){
   return number;
  }
};

/*
  * 二进制数转换到十进制数
  */
public static String binaryToDecimal(String binary){
  StringBuffer buf=new StringBuffer();
  String[] strBinary=binary.split(" ");//根据空格拆分二进制数
  for(String str:strBinary){//提取二进制数
   StringBuffer strBuf=new StringBuffer(str);
   char[] element=strBuf.reverse().toString().toCharArray();//反转二进制数方便运算
   int digit=0;//次幕
   int result=0;//结果
   for(char temp:element){//提取单个数
    int intNumber=Integer.parseInt(Character.toString(temp));
    intNumber=intNumber*(int)(Math.pow(DECIMAL, digit));//根据位数算结果 算法:位数*2的次幕
    result=result+intNumber;
    digit=digit+1;//次幕加一
   }
   buf.append(result);
   buf.append(" ");
  }
  return buf.toString();
}

/*
  * 十六进制转换为二进制数
  */
public static String sexaDecToBinary(String sexaDec){
  StringBuffer buf=new StringBuffer();
  String[] strSexa=sexaDec.split(" ");//根据空格拆分十六进制数
  for(String str:strSexa){
   char[] element=str.toCharArray();//拆分为单个的位数
   for(char temp:element){
    if(Character.isDigit(temp)){//数字
     int intNumber=Integer.parseInt(Character.toString(temp));
     buf.append(splitBinaryStr(intNumber));
    }else{//十六进制字符
     int intNumber=convertSexa(temp);
     buf.append(splitBinaryStr(intNumber));
    }
   }
   buf.append(" ");
  }
  return buf.toString();
}

/*
  * 根据十进制数字转换为二进制数  四位数
  */
private static String splitBinaryStr(int number){
  StringBuffer result=new StringBuffer();
  boolean key=true;
  if(number!=0){//判断数不为零
   while(key){
    if(number%DECIMAL==0){//求余等于零则该位为零         余数为零的情况
     result.append("0");
     number=number/DECIMAL;//除二运算
    }else if(number>=DECIMAL){//数大于二且求余不等于零        余数为一的情况
     result.append("1");
     number=number/DECIMAL;//除二运算
    }else{
     result.append("1");//最高位情况    进一位
     key=false;
    }
   }
  }
  while(result.length()<4){//少于四位数则补零
   result.append("0");
  }
  return result.reverse().toString();//反转字符串  再返回二进制数
}

/*
  * 根据十六进制字符转换为十进制数字
  */
private static int convertSexa(char temp){
  switch(temp){
   case 'A':
    return SexaEnum.A.get();
   case 'B':
    return SexaEnum.B.get();
   case 'C':
    return SexaEnum.C.get();
   case 'D':
    return SexaEnum.D.get();
   case 'E':
    return SexaEnum.E.get();
   case 'F':
    return SexaEnum.F.get();
   default:
    return 0;
  }
}

}

Ascii码转换类:

package com.packet;

public class ConvertAscii {

public static String convert(String number){
  String result="";
  String[] str=number.split(" ");
  for(String temp:str){
   int code;  
   code = Integer.parseInt(temp, 10);  
   // 如果30代表是 16进制的30话,就取16  
   // 如果30代表是 10进制的30话,就取10  
   // code = Integer.parseInt(source, 10);  
   char strCode = (char) code;
   result+=strCode;
  }
  return result;
}
}
调用类:

package com.packet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

public static void print(String str){
  String binary=ConvertSystem.sexaDecToBinary(str);
  String number=ConvertSystem.binaryToDecimal(binary);
  System.out.println("Denary System:");
  System.out.println(number);
  String code=ConvertAscii.convert(number);
  System.out.println("Ascii:");
  System.out.println(code);
}

public static void main(String[] args){
  boolean key=true;
  while(key){
   BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
   String str=null;
   try{
   
    str=buf.readLine();
   }catch(IOException e){
    e.printStackTrace();
   }
   if(str!=null){
    print(str);
   }
  }
}
}


ewfwefwewegegweg gegwgwegwegwgegegwegwwegwgweg
您需要登入後才可以回帖 登入 | 立即註冊

正在連接伺服器...
打開冰楓聊天室
廣告刊登意見回饋關於我們職位招聘

Copyright © 2011-2019 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|意見反饋|手機版|Archiver|冰楓論壇

GMT+8, 2019-7-19 06:09

APP Store下載 Play Store下載
回頂部