135 votes

Comment obtenir une représentation binaire 0 entière d'un entier en java?

par exemple, pour 1, 2, 128, 256 le fichier de sortie peut être (16 chiffres):

0000000000000001
0000000000000010
0000000010000000
0000000100000000

J'ai essayé

String.format("%16s", Integer.toBinaryString(1));

il met des espaces à gauche-rembourrage:

`               1'

Comment mettre des 0s pour le rembourrage. Je ne pouvais pas le trouver dans Formateur. Est-il une autre façon de le faire?

Merci à l'avance.

P. S. ce post explique comment formater entiers à gauche 0-padding, mais ce n'est pas pour la représentation binaire.

214voto

Samuel Parsonage Points 1066

Je pense que c'est une solution sous-optimale, mais vous pourriez le faire

 String.format("%16s", Integer.toBinaryString(1)).replace(' ', '0')
 

17voto

Zoran Regvart Points 1777

Il n'y a pas de conversion en binaire construit en java.util.Formateur, je vous conseille d'utiliser de la Chaîne.remplacer pour remplacer les espaces par des zéros, comme dans:

String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0")

Ou de mettre en œuvre votre propre logique de convertir des entiers en binaire de représentation avec l'ajout de padding à gauche quelque part le long des lignes données dans le présent. Ou si vous avez vraiment besoin de passer de nombre de format, vous pouvez convertir votre représentation binaire de BigInteger et puis le format que de zéros, mais c'est très coûteux au moment de l'exécution, comme dans:

String.format("%016d", new BigInteger(Integer.toBinaryString(1)))

13voto

Michal B Points 19

Vous pouvez utiliser Apache Commons StringUtils . Il propose des méthodes pour le rembourrage des chaînes:

 StringUtils.leftPad(Integer.toBinaryString(1), 16, '0');
 

9voto

Tom Spencer Points 61

J'ai essayé toutes sortes d'appels de méthode que je n'ai pas vraiment utilisé avant de faire ce travail, ils ont travaillé avec un succès modéré, jusqu'à ce que j'ai pensé à quelque chose qui est si simple qu'il pourrait peut-être marcher, et il l'a fait!

Je suis sûr que ça a été pensé avant, vous ne savez pas si c'est tout bon pour la longue chaîne de codes binaires, mais il fonctionne très bien pour 16Bit cordes. Espérons que cela aide!! (Note de la deuxième partie du code est amélioré)

String binString = Integer.toBinaryString(256);
  while (binString.length() < 16) {    //pad with 16 0's
        binString = "0" + binString;
  }

Grâce à la Volonté de les aider à améliorer cette réponse pour le faire fonctionner avec une boucle. Ce peut-être un peu maladroit, mais il fonctionne, merci de les améliorer et de les commenter en arrière si vous le pouvez....

binString = Integer.toBinaryString(256);
int length = 16 - binString.length();
char[] padArray = new char[length];
Arrays.fill(padArray, '0');
String padString = new String(padArray);
binString = padString + binString;

4voto

AlexR Points 60796

Je ne connais pas la "bonne" solution mais je peux vous proposer un correctif rapide.

 String.format("%16s", Integer.toBinaryString(1)).replace(" ", "0");
 

Je viens de l'essayer et j'ai vu que cela fonctionnait bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X