por exemplo, para 1, 2, 128, 256
a saída pode ser (16 dígitos):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
eu tentei
String.format("%16s", Integer.toBinaryString(1));
coloca espaços para preenchimento esquerdo:
` 1'
Como colocar 0
s para preenchimento. Não consegui encontrá-lo no Formatador . tem outro jeito de fazer isto?
PS, este post descreve como formatar números inteiros com preenchimento 0 esquerdo, mas não é para a representação binária.
java
binary
string-formatting
khachik
fonte
fonte
%016s
?Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
Respostas:
Eu acho que essa é uma solução abaixo do ideal, mas você poderia fazer
fonte
Returns a string representation of the integer argument as an unsigned integer in base 2.
Não há conversão binária incorporada no java.util.Formatter, aconselho que você use String.replace para substituir o caractere de espaço por zeros, como em:
Ou implemente sua própria lógica para converter números inteiros em representação binária com preenchimento esquerdo adicionado em algum lugar ao longo das linhas indicadas neste exemplo . Ou, se você realmente precisar passar números para o formato, poderá converter sua representação binária em BigInteger e formatá-la com zeros à esquerda, mas isso é muito caro no tempo de execução, como em:
fonte
Você pode usar o Apache Commons StringUtils . Oferece métodos para preenchimento de strings:
fonte
Eu estava tentando todos os tipos de chamadas de métodos que eu realmente não havia usado antes para fazer esse trabalho, elas funcionaram com sucesso moderado, até que pensei em algo tão simples que poderia funcionar, e funcionou!
Tenho certeza de que já foi pensado antes, não tenho certeza se é bom para uma longa sequência de códigos binários, mas funciona bem para cadeias de 16 bits. Espero que ajude!! (Observe que o segundo trecho de código foi aprimorado)
Agradecemos a Will por ajudar a melhorar esta resposta para que ela funcione sem um loop. Talvez isso seja um pouco desajeitado, mas funciona. Por favor, melhore e comente novamente se puder ....
fonte
binString.length()
e 16 para criar uma sequência e, em seguida, anexando-a a binString, em vez de repetir, embora com algo como esta resposta: stackoverflow.com/a/2804866/1353098Aqui está uma nova resposta para um post antigo.
Para preencher um valor binário com zeros à esquerda para um comprimento específico, tente o seguinte:
Se
len = 4
eval = 1
,retorna a string
"10001"
, entãodescarta o primeiro caractere. Então, obtemos o que queremos:
Se
val
é provável que seja negativo, tente:fonte
Uma versão mais simples da idéia de user3608934 "Este é um truque antigo, crie uma sequência com 16 0 e, em seguida, acrescente a sequência binária aparada que você obteve":
fonte
Não sei a solução "certa", mas posso sugerir um patch rápido.
Eu apenas tentei e vi que funciona bem.
fonte
%32s
?experimentar...
Eu não acho que esta é a maneira "correta" de fazer isso ... mas funciona :)
fonte
0000001111111111
para o valor de entrada1023
Qualquer valor maior que isso produzirá a saídatoBinaryString(1024)
da10000000000
qual é muito grande para oparseInt(...)
Assim, a entrada funciona apenas para 1K de 64K possíveis valores de entradaUma solução ingênua que funcionaria seria
Um outro método seria
Isso produzirá uma sequência de 16 bits do número inteiro 5
fonte
A partir do Java 11, você pode usar o método repeat (...) :
Ou, se você precisar de uma representação de 32 bits de qualquer número inteiro:
fonte
Esse é um truque antigo, crie uma string com 16 0 e, em seguida, acrescente a string binária aparada que você obteve de String.format ("% s", Integer.toBinaryString (1)) e use os 16 caracteres mais à direita, cortando qualquer elemento inicial 0's. Melhor ainda, crie uma função que permita especificar por quanto tempo você deseja uma string binária. É claro que provavelmente existem outras maneiras de conseguir isso, incluindo bibliotecas, mas estou adicionando este post para ajudar um amigo :)
fonte
Eu escreveria minha própria classe util com o método abaixo
}
Resultado:
A mesma abordagem pode ser aplicada a qualquer tipo integral. Preste atenção ao tipo de máscara
long mask = 1L << i;
fonte
Este método converte um int em uma String, length = bits. Acolchoado com 0s ou com os bits mais significativos truncados.
fonte
Você pode usar a lib https://github.com/kssource/BitSequence . Aceita um número e retorna por sequência de caracteres, preenchida e / ou agrupada.
fonte
str[i].length()
é comprimento do número, digamos 2 em binário, é 01, que é o comprimento 2, altera 4 para o comprimento máximo desejado do número. Isso pode ser otimizado para O (n). usando continue.fonte
// Abaixo lidamos com tamanhos adequados
fonte
fonte
numB
enum
são iguais e não diferente de qualquer forma