Por ejemplo, los bits en un byte B
son 10000010
, cómo puedo asignar los bits a la cadena str
literal, 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 1
lugar de00000001
byte
a 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 en1
lugar de00000001
byte
en 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
.& 0xFF
básicamente conviertesigned byte
a en ununsigned integer
. Por ejemplo,-129
como 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 :)
0xFF
es 255, o11111111
(valor máximo para un byte sin signo).0x100
es 256, o100000000
La
&
conversión del byte a un número entero. En ese punto, puede ser cualquier cosa desde0
-255
(00000000
hasta11111111
, excluí los 24 bits iniciales).+ 0x100
y.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
b
es1
, sin+ 0x100
usted 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& 0xff
correcciones 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
byte
primitiva de acuerdo con la especificación de Java representa un valor entre−128
y127
. Por ejemplo, si abyte
escast
para unint
Java interpretará el primerobit
como elsign
y usará la extensión del signo.Entonces, ¿cómo convertir un byte mayor que
127
en su representación de cadena binaria?Nada le impide ver a
byte
simplemente como 8 bits e interpretar esos bits como un valor entre0
y255
. 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−128
y127
menos que se indique explícitamente lo contrario.Entonces, la mejor manera de resolver esto es convertir el
byte
valor en unint
valor llamando alByte.toUnsignedInt()
método o convirtiéndolo en unint
primitivo(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