Por ejemplo, los bits en un byte Bson 10000010, cómo puedo asignar los bits a la cadena strliteral, es decir, str = "10000010".
Editar
Leí el byte de un archivo binario y lo almacené en la matriz de bytes B. Yo uso System.out.println(Integer.toBinaryString(B[i])). el problema es
(a) cuando los bits comienzan con (más a la izquierda) 1, la salida no es correcta porque se convierte B[i]en un valor int negativo.
(b) si los bits comienzan con 0, la salida ignora 0, por ejemplo, suponga que B[0]tiene 00000001, la salida es en 1lugar de00000001

bytea en una cadena en base 2?Boolean,Byte,Short,Char,Int, yLong. stackoverflow.com/a/54950845/501113Respuestas:
Utilizar
Integer#toBinaryString():DEMO .
fuente
B. Yo usoSystem.out.println(Integer.toBinaryString(B[i])). Cuando utilizo estos métodos, el problema es (a) cuando los bits comienzan con (más a la izquierda) 1, la salida no es correcta porque se convierteB[i]en un valor int negativo. (b) si los bits comienzan con 0, la salida se ignora0, por ejemplo, suponga queB[0]tiene00000001, la salida es en1lugar de00000001byteen Java es un entero de complemento a dos con signo de 8 bits. Su valor mínimo es -128 (2 ^ 8) y su valor máximo es127; b) Puede solucionarlo fácilmente usando estoString.format("%8s", Integer.toBinaryString(b)).replace(' ', '0')para rellenar la cadena resultante con ceros a la izquierda.&con0xFF.& 0xFFbásicamente conviertesigned bytea en ununsigned integer. Por ejemplo,-129como dijiste, está representado por11111111111111111111111110000001. En este caso, básicamente desea los primeros 8 bits (menos significativos), por lo que Y (&) con0xFF(00000000000000000000000011111111), limpiando efectivamente los 1 a la izquierda que no nos importan, dejando solo10000001.Usé esto. Idea similar a otras respuestas, pero no vi el enfoque exacto en ninguna parte :)
0xFFes 255, o11111111(valor máximo para un byte sin signo).0x100es 256, o100000000La
&conversión del byte a un número entero. En ese punto, puede ser cualquier cosa desde0-255(00000000hasta11111111, excluí los 24 bits iniciales).+ 0x100y.substring(1)asegúrese de que haya ceros a la izquierda.Lo cronometré en comparación con la respuesta de João Silva , y esto es 10 veces más rápido. http://ideone.com/22DDK1 No incluí la respuesta de Pshemo porque no se rellena correctamente.
fuente
bes1, sin+ 0x100usted solo obtendrá"1"como su cadena. Al agregar1, obtienes100000001, y si tomas la subcadena ignorando el primer carácter, obtendrás el correcto"00000001". Si no desea que su cuerda esté acolchada, simplemente puede usarInteger.toBinaryString(b & 0xff). Las& 0xffcorrecciones de los / de dos cuestiones negativas del complemento¿Es esto lo que estás buscando?
convertir de String a byte
convertir de byte a String
O como dijo João Silva en su comentario para agregar interlineado
0, podemos formatear la cadena a la longitud 8 y reemplazar los espacios iniciales resultantes con cero, por lo que en el caso de una cadena como" 1010"obtendremos"00001010"fuente
Puede verificar cada bit en el byte y luego agregar 0 o 1 a una cadena. Aquí hay un pequeño método de ayuda que escribí para probar:
fuente
Obtenga cada bit de byte y conviértalo en cadena. Digamos que el byte tiene 8 bits y podemos obtenerlos uno por uno mediante el movimiento de bits. Por ejemplo, movemos el segundo bit del byte 6 bits a la derecha, el segundo bit al final del bit de 8 bits, luego y (&) con 0x0001 para limpiar los bits frontales.
fuente
Este código demostrará cómo se puede dividir un int de Java en sus 4 bytes consecutivos. Luego podemos inspeccionar cada byte usando métodos Java en comparación con la interrogación de byte / bit de bajo nivel.
Este es el resultado esperado cuando ejecuta el siguiente código:
Aquí está el código para ejecutar:
fuente
fuente
Lo siento, sé que esto es un poco tarde ... Pero tengo una manera mucho más fácil ... Para cadena binaria:
método getCorrectBits:
fuente
fuente
Puede trabajar con BigInteger como el siguiente ejemplo, especialmente si tiene 256 bits o más:
Otro ejemplo que acepta bytes:
Resultado:
También puede trabajar para convertir formato binario a byte
Nota: Para el formato de cadena para su formato binario, puede usar la siguiente muestra
fuente
Una respuesta simple podría ser:
fuente
Todos sabemos que Java no proporciona nada parecido a la palabra clave unsigned. Además, una
byteprimitiva de acuerdo con la especificación de Java representa un valor entre−128y127. Por ejemplo, si abyteescastpara unintJava interpretará el primerobitcomo elsigny usará la extensión del signo.Entonces, ¿cómo convertir un byte mayor que
127en su representación de cadena binaria?Nada le impide ver a
bytesimplemente como 8 bits e interpretar esos bits como un valor entre0y255. Además, debe tener en cuenta que no hay nada que pueda hacer para forzar su interpretación sobre el método de otra persona. Si un método acepta unbyte, entonces ese método acepta un valor entre−128y127menos que se indique explícitamente lo contrario.Entonces, la mejor manera de resolver esto es convertir el
bytevalor en unintvalor llamando alByte.toUnsignedInt()método o convirtiéndolo en unintprimitivo(int) signedByte & 0xFF. Aquí tienes un ejemplo:Salida
fuente
Solo adivino aquí, pero si tiene un Byte, ¿no podría simplemente invocar toString () en el objeto para obtener el valor? ¿O, mirando la API , usando byteValue ()?
fuente