16進数シーケンスを入力し、そのバイナリを逆シーケンスして新しい16進数を出力します.
7466 ワード
16進数のシーケンスを入力します.
入力:1 a 1 bf
バイナリ:0001 1010 0001 1011 1111
反転:1111 1101 1000 0101 1000
出力:FD 858
入力:1 a 1 bf
バイナリ:0001 1010 0001 1011 1111
反転:1111 1101 1000 0101 1000
出力:FD 858
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BitReverse {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
try {
String string = bReader.readLine();
bReader.close();
byte[] bt = getByte(string);
//System.out.println("bt"+bt.length);
byte[] res = new byte[bt.length];
for(int i=0; i<res.length; ++i){
res[i] = reverse(bt[res.length-i-1]);
}
print(res);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 16 , byte
* @param str
* @return
* @throws Exception
*/
private static byte[] getByte(String str) throws Exception{
byte[] bt = new byte[(int)Math.round(str.length()/2.0)];
str = str.toLowerCase();
int k = 0, j = 0;
for(int i=0; i<str.length(); i=i+2){
k = 0;
j = 0;
k = getInt(str.charAt(i));
if((i+1)<str.length())
j = getInt(str.charAt(i+1));
bt[(i/2)] = (byte)((k<<4) | j);
}
return bt;
}
/**
* 16 , , int ,a-10,b-11,5-5
* @param temp
* @return
* @throws Exception
*/
private static int getInt(char temp) throws Exception{
if(temp >= '0' && temp <= '9') return (temp-'0');
else if (temp >= 'a' && temp <= 'f') {
return (temp-'a'+10);
}else {
throw new Exception(" ");
}
}
/**
* byte b , Integer reverse 。
* @param b
* @return
*/
private static byte reverse(byte b){
Integer temp = (int)b;
temp = Integer.reverse(temp);
return (byte)(temp>>24);
}
private static void print(byte[] b){
String string = "";
for(int i=0; i<b.length; ++i){
string += Integer.toHexString(b[i] & 0xff);
}
System.out.println(string.toUpperCase());
}
}