package com.javarush.task.pro.task09.task0908;
import java.util.Arrays;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static void main(String[] args) {
String binaryNumber = "10101010";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "aa";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
String[] arrHex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
String[] arrBin = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
StringBuilder result = new StringBuilder();
if (binaryNumber == null || binaryNumber.equals("") || !binaryNumber.matches("[01]+")) {
return result.toString();
} else {
if (binaryNumber.length() % 4 == 0) {
int length = binaryNumber.length();
int index = length / 4;
for (int i = 0; i < index; i++) {
int elementIndex;
String partOfBinaryNumber = binaryNumber.substring(0, 4);
for (int j = 0; j < arrBin.length; j++) {
if (arrBin[j].equals(partOfBinaryNumber)) {
elementIndex = j;
result.append(arrHex[elementIndex]);
break;
}
}
binaryNumber = binaryNumber.substring(4);
}
} else {
int x = 4 - binaryNumber.length() % 4;
for (int i = 0; i < x; i++) {
binaryNumber = "0" + binaryNumber;
}
return toHex(binaryNumber);
}
return result.toString();
}
}
public static String toBinary(String hexNumber) {
String[] arrHex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
String[] arrBin = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
StringBuilder result = new StringBuilder();
if (hexNumber == null || hexNumber.equals("") || !hexNumber.matches("[0-9,a-f]+")) {
return result.toString();
} else {
for (int i = 0; i < hexNumber.length(); i++) {
String s = hexNumber.substring(i, i+1);
for (int j = 0; j < arrHex.length - 1; j++) {
if (s.equals(arrHex[j])) {
result.append(arrBin[j]);
break;
}
}
}
}
return result.toString();
}
}package com.javarush.task.pro.task09.task0908;
import java.util.Arrays;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static void main(String[] args) {
String binaryNumber = "1001111100000101101011000011111000010";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "13e0b587c2";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
String[] arrHex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
String[] arrBin = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
StringBuilder result = new StringBuilder();
if (binaryNumber == null || binaryNumber.equals("") || !binaryNumber.matches("[01]+")) {
return result.toString();
} else {
if (binaryNumber.length() % 4 == 0) {
int length = binaryNumber.length();
int index = length / 4;
for (int i = 0; i < index; i++) {
int elementIndex;
String partOfBinaryNumber = binaryNumber.substring(0, 4);
for (int j = 0; j < arrBin.length; j++) {
if (arrBin[j].equals(partOfBinaryNumber)) {
elementIndex = j;
result.append(arrHex[elementIndex]);
break;
}
}
binaryNumber = binaryNumber.substring(4);
}
} else {
int x = 4 - binaryNumber.length() % 4;
for (int i = 0; i < x; i++) {
binaryNumber = "0" + binaryNumber;
}
return toHex(binaryNumber);
}
return result.toString();
}
}
public static String toBinary(String hexNumber) {
String[] arrHex = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
String[] arrBin = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
StringBuilder result = new StringBuilder();
if (hexNumber == null || hexNumber.equals("") || !hexNumber.matches("[0-9,a-f]+")) {
return result.toString();
} else {
for (int i = 0; i < hexNumber.length(); i++) {
String s = hexNumber.substring(i, i+1);
for (int j = 0; j < arrHex.length - 1; j++) {
if (s.equals(arrHex[j])) {
result.append(arrBin[j]);
break;
}
}
}
}
return result.toString();
}
}