Tengo una matriz de bytes. Quiero acceder a cada uno de los bytes y desea que su equivalente valor binario de 8 bits), así como para llevar a cabo las siguientes operaciones sobre ella. He oído hablar de BitSet pero, ¿hay alguna otra forma de lidiar con esto?

Gracias.

Gracias a todos!:) He intentado de todas las cosas pero lo que he hecho es que he tomado de bytes individuales de la matriz y, a continuación, he utilizado el método Entero.toBinaryString(valor de byte). Me dio el resultado deseado.

OriginalEl autor Supereme | 2010-11-04

6 Comentarios

  1. 3
    byte ar[] ;
    byte b = ar[0];//you have 8 bits value here,if I understood your Question correctly :)

    OriginalEl autor Jigar Joshi

  2. 8

    Si sólo necesita la representación de Cadena en binario puede utilizar simplemente Integer.toString() con el opcional de un segundo conjunto de parámetros 2 binario.

    Para llevar a cabo tareas generales de bits cambiando en cualquier tipo integral, tiene que usar la lógica y bitshift operadores.

    //tests if bit is set in value
    boolean isSet(byte value, int bit){
       return (value&(1<<bit))!=0;
    } 
    
    //returns a byte with the required bit set
    byte set(byte value, int bit){
       return value|(1<<bit);
    }

    OriginalEl autor MAK

  3. 4

    Usted puede encontrar algo a lo largo de las líneas de lo que usted está buscando en el La Guayaba Primitivas paquete.

    Alternativamente, usted podría querer escribir algo como

    public boolean[] convert(byte...bs) {
     boolean[] result = new boolean[Byte.SIZE*bs.length];
     int offset = 0;
     for (byte b : bs) {
      for (int i=0; i<Byte.SIZE; i++) result[i+offset] = (b >> i & 0x1) != 0x0;
      offset+=Byte.SIZE;
     }
     return result;
    }

    Que no se ha probado, pero la idea está ahí. También hay modificaciones a los bucles/asignación para devolver una matriz de algo más (por ejemplo, int o long).

    Habría dado este un +1, excepto que usted usó la palabra «elsewise».

    OriginalEl autor Carl

  4. 2

    Java ha bitwise operators. Ver un ejemplo de este tutorial.

    El lenguaje de programación Java también ofrece a los operadores que realizan a nivel de bit y de desplazamiento de bits de las operaciones sobre los tipos enteros. Los operadores descritos en esta sección son de uso menos frecuente. Por lo tanto, su cobertura es breve; la intención es simplemente hacer que usted consciente de que estos operadores de existir.

    Unario complemento bit a bit operador «~» invierte un patrón de bits; puede ser aplicado a cualquiera de los tipos enteros, por lo que cada «0» a «1» y todos los «1» a «0». Por ejemplo, un byte de 8 bits; la aplicación de este operador a un valor cuyo patrón de bits es «00000000» iba a cambiar su patrón de «11111111».

    Un byte valor ES integral, se puede comprobar bits de estado mediante el enmascaramiento de las operaciones.
    El bit menos significativo corresponde a la máscara de 1 o 0x1, el siguiente bit corresponden a 0x2, etc.

    byte b = 3;
    if((b & 0x1) == 0x1) {
        //LSB is on
    } else {
        //LSB is off
    }
    if(b & 0x1) no compila. Debe utilizar if(b & 0x1 == 0x1)
    Gracias. Java no es C 😉

    OriginalEl autor gimel

  5. 0

    Bueno, yo creo que entiendo lo que quieres decir. Ahora más bien un error sustancial con esto es que no funciona en números negativos. Sin embargo, suponiendo que no los estás usando para leer el archivo de entradas, usted todavía puede ser capaz de utilizarlo.

    public static ArrayList<Boolean> toBitArr(byte[] bytearr){
        ArrayList<Boolean> bitarr = new ArrayList<Boolean>();
        ArrayList<Boolean> temp = new ArrayList<Boolean>();
        int i = 0;
        for(byte b: bytearr){
            while(Math.abs(b) > 0){
                temp.add((b % 2) == 1);
                b = (byte) (b >> 1);
            }
            Collections.reverse(temp);
            bitarr.addAll(temp);
            temp.clear();
        }
        return bitarr;
    }

    OriginalEl autor Pizzamonkey

Dejar respuesta

Please enter your comment!
Please enter your name here