tabla suma resueltos resta numeros multiplicacion hexadecimal ejercicios calculadora binarios binario binaria java binary hex

java - suma - Conversión de una lista entera que contiene binario a hexadecimal



suma y resta de binarios (3)

Entonces, aquí está mi opinión ...

Básicamente, esto utiliza List#subList para crear una sub-lista de la matriz binaria principal. Cada sublista contiene hasta 8 valores ...

int length = Math.min(8, bits.size()); List<Integer> byteList = bits.subList(0, length);

Luego invierte esta lista, inviertes fácilmente el orden for-loop , esto me parece más simple ...

Collections.reverse(byteList);

Luego utilizo un for-loop simple for-loop recorrer la sub-lista. Para cada bit que es 1 , simplemente agrego su equivalente binario ( Math.pow(2, index) ) al valor resultante

for (int index = 0; index < byteList.size(); index++) { int bit = byteList.get(index); if (bit == 1) { int pos = (int)Math.pow(2, index); value += pos; } }

Luego remuevo los primeros n valores de la lista maestra y continúo hasta que no quede nada ...

Esto se imprimirá ...

Word = 00000101 = 5; 0x05 Word = 01000011 = 67; 0x43 Word = 10011101 = 157; 0x9d

Ejemplo ejecutable ...

import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test100 { public static void main(String[] args) { List<Integer> bits = new ArrayList<Integer>(25); bits.add(0); bits.add(0); bits.add(0); bits.add(0); bits.add(0); bits.add(1); bits.add(0); bits.add(1); bits.add(0); bits.add(1); bits.add(0); bits.add(0); bits.add(0); bits.add(0); bits.add(1); bits.add(1); bits.add(1); bits.add(0); bits.add(0); bits.add(1); bits.add(1); bits.add(1); bits.add(0); bits.add(1); System.out.println(); while (bits.size() > 0) { int length = Math.min(8, bits.size()); List<Integer> byteList = bits.subList(0, length); Collections.reverse(byteList); int value = 0; StringBuilder binary = new StringBuilder(8); for (int index = 0; index < byteList.size(); index++) { int bit = byteList.get(index); if (bit == 1) { int pos = (int)Math.pow(2, index); value += pos; } binary.insert(0, bit); } System.out.println("Word = " + binary + " = " + value + "; 0x" + pad(2, Integer.toHexString(value))); int size = Math.max(0, bits.size()); bits = bits.subList(length, size); } } public static String pad(int length, String value) { StringBuilder zeros = new StringBuilder(value); while (zeros.length() < length) { zeros.insert(0, "0"); } return zeros.toString(); } }

Tengo una lista de enteros que contiene algunos valores binarios

List<Integer> binary = new ArrayList(); for (int i=0; i<8; i++) { bin[i] = pText[i] ^ ivKey[i]; //some binary value is calculated binary.add(bin[i]); //the binary list gets updated here } for (int i=0; i<myCipher2.size(); i++) { System.out.print(binary.get(i)); //this prints the appended binary as shown in the output }

La lista cuando se imprime da lo siguiente:

000001010100001110011101

Cada 8 bits se refiere a un hex, por lo que la salida que deseo cuando se convierta debería darme el siguiente

05 43 9d

¿Cómo puedo dividir la lista en 8 bits y convertir esos 8 bits en hex?


Lo primero es lo primero, no debe declarar objetos genéricos con tipos crudos, agregue un tipo a su ArrayList :

List<Integer> binary = new ArrayList<Integer>();

Dado que no está directamente relacionado con su pregunta, puede leer por qué debe hacer esto aquí

Ahora, ya que su lista contiene dígitos binarios individuales, lo que puede hacer es usar un StringBuilder para construir cadenas binarias de 8 bits a partir de él. También puede usar un StringBuilder para construir el valor hexadecimal convertido. Cada vez que construyes esta cadena de 8 bits, la conviertes en hexadecimal (en realidad primero a decimal y luego a hexadecimal) y la anexas a StringBuilder luego crea la cadena hexagonal.

Aquí está el código:

// ... your program StringBuilder hexString = new StringBuilder(); StringBuilder eightBits = new StringBuilder(); for(int i = 0; i < binary.size(); i += 8) { for(int j = i; j < (i + 8) && j < binary.size(); j++) { // read next 8 bits or whatever bits are remaining eightBits.append(binary.get(j)); // build 8 bit value } int decimal = Integer.parseInt(eightBits.toString(), 2); // get decimal value hexString.append(Integer.toHexString(decimal) + " "); // add hex value to the hex string and a space for readability eightBits.setLength(0); // reset so we can append the new 8 bits } System.out.println(hexString.toString()); // prints "5 43 9d" for the value you gave

Nota: este programa es una continuación de su programa


Puede crear una cadena binaria y convertirla a decimal y luego a hexadecimal:

int[] arr = {0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,1,0,1}; int i = 0; while (i < arr.length) { String res = ""; for(int j = 0; j < 8; j++) { res += arr[i]; i++; } System.out.println(Integer.toHexString(Integer.parseInt(res, 2))); }

SALIDA

5 43 9d