Por exemplo, os bits em um byte B
são 10000010
, como posso atribuir os bits à string str
literalmente, ou seja str = "10000010"
,.
Editar
Eu li o byte de um arquivo binário e o armazenei na matriz de bytes B
. Eu uso System.out.println(Integer.toBinaryString(B[i]))
. O problema é
(a) quando os bits começam com (mais à esquerda) 1, a saída não é correta porque converte B[i]
para um valor int negativo.
(b) se os bits começam com 0
, a saída ignora 0
, por exemplo, assume que B[0]
tem 00000001, a saída é em 1
vez de00000001
byte
em uma string na base 2?Boolean
,Byte
,Short
,Char
,Int
, eLong
. stackoverflow.com/a/54950845/501113Respostas:
Use
Integer#toBinaryString()
:DEMO .
fonte
B
. Eu usoSystem.out.println(Integer.toBinaryString(B[i]))
. Quando eu uso esses métodos, o problema é (a) quando os bits começam com (mais à esquerda) 1, a saída não está correta porque converteB[i]
para um valor int negativo. (b) se os bits começam com 0, a saída ignora0
, por exemplo, assume queB[0]
tem00000001
, a saída é em1
vez de00000001
byte
em Java é um inteiro complemento de dois com sinal de 8 bits. Seu valor mínimo é -128 (2 ^ 8) e seu valor máximo é127
; b) Você pode corrigir isso facilmente usando issoString.format("%8s", Integer.toBinaryString(b)).replace(' ', '0')
para preencher à esquerda a string resultante com zeros.&
com0xFF
.& 0xFF
basicamente converte umsigned byte
em umunsigned integer
. Por exemplo,-129
como você disse, é representado por11111111111111111111111110000001
. Nesse caso, você basicamente deseja os primeiros 8 bits (menos significativos), então faça o AND (&
) com0xFF
(00000000000000000000000011111111
), limpando efetivamente os 1's à esquerda com os quais não nos importamos, deixando apenas10000001
.Eu usei isso. Ideia semelhante a outras respostas, mas não vi a abordagem exata em qualquer lugar :)
0xFF
é 255 ou11111111
(valor máximo para um byte sem sinal).0x100
é 256, ou100000000
O
&
upcasts o byte para um inteiro. Nesse ponto, pode ser qualquer coisa de0
-255
(00000000
a11111111
, excluí os 24 bits principais).+ 0x100
e.substring(1)
garantir que haverá zeros à esquerda.Eu cronometrei em comparação com a resposta de João Silva , e isso é mais de 10 vezes mais rápido. http://ideone.com/22DDK1 Não incluí a resposta de Pshemo porque ela não preenche corretamente.
fonte
b
for1
, sem+ 0x100
você receberá apenas"1"
como sua string. Adicionando1
, você obtém100000001
, e se você pegar a substring ignorando o primeiro caractere, você obterá o apropriado"00000001"
. Se você não quiser que sua corda seja acolchoada, você pode simplesmente usarInteger.toBinaryString(b & 0xff)
. O& 0xff
corrige os problemas de complemento do negativo / doisÉ isso que você está procurando?
conversão de string para byte
convertendo de byte em string
Ou, como João Silva disse em seu comentário para adicionar entrelinha
0
, podemos formatar string com comprimento de 8 e substituir os espaços iniciais resultantes por zero, então no caso de string como" 1010"
obteremos"00001010"
fonte
Você poderia verificar cada bit no byte e então acrescentar 0 ou 1 a uma string. Aqui está um pequeno método auxiliar que escrevi para teste:
fonte
Obtenha cada bit de byte e converta em string. Digamos que o byte tenha 8 bits, e podemos obtê-los um a um por meio do movimento de bits. Por exemplo, movemos o segundo bit do byte 6 bits para a direita, o segundo bit no último bit de 8 bits e, em seguida, (&) com 0x0001 para limpar os bits da frente.
fonte
Este código irá demonstrar como um java int pode ser dividido em seus 4 bytes consecutivos. Podemos então inspecionar cada byte usando métodos Java em comparação com a interrogação de byte / bit de baixo nível.
Esta é a saída esperada quando você executa o código abaixo:
Aqui está o código a ser executado:
fonte
fonte
Desculpe, eu sei que é um pouco tarde ... Mas eu tenho uma maneira muito mais fácil ... Para string binária:
Método getCorrectBits:
fonte
fonte
Todos nós sabemos que Java não fornece nada parecido com a palavra-chave unsigned. Além disso, uma
byte
primitiva de acordo com as especificações do Java representa um valor entre−128
e127
. Por exemplo, se abyte
forcast
para umint
Java, interpretará o primeirobit
comosign
e usará a extensão de sinal.Então, como converter um byte maior que
127
em sua representação em string binária ??Nada impede que você veja um
byte
simplesmente como 8 bits e interprete esses bits como um valor entre0
e255
. Além disso, você precisa ter em mente que não há nada que você possa fazer para forçar sua interpretação sobre o método de outra pessoa. Se um método aceita umbyte
, então esse método aceita um valor entre−128
e, a127
menos que seja explicitamente declarado de outra forma.Portanto, a melhor maneira de resolver isso é converter o
byte
valor em umint
valor chamando oByte.toUnsignedInt()
método ou convertendo-o em umint
primitivo(int) signedByte & 0xFF
. Aqui você tem um exemplo:Resultado
fonte
Você pode trabalhar com BigInteger como o exemplo abaixo, mais especialmente se tiver 256 bits ou mais:
Outro exemplo que aceita bytes:
Resultado:
Você também pode trabalhar para converter o formato Binário para Byte
Nota: Para formatação de string para o seu formato binário, você pode usar o exemplo abaixo
fonte
Uma resposta simples poderia ser:
fonte
Apenas supondo aqui, mas se você tiver um Byte, então não poderia simplesmente invocar toString () no objeto para obter o valor? Ou, olhando para a api , usando byteValue ()?
fonte