par exemple, pour 1, 2, 128, 256
la sortie peut être (16 chiffres):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
j'ai essayé
String.format("%16s", Integer.toBinaryString(1));
il met des espaces pour le remplissage à gauche:
` 1'
Comment mettre des 0
s pour le rembourrage. Je n'ai pas pu le trouver dans Formatter . Y a-t-il une autre façon de le faire?
PS ce post décrit comment formater des entiers avec un remplissage 0 à gauche, mais ce n'est pas pour la représentation binaire.
java
binary
string-formatting
Khachik
la source
la source
%016s
?Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
Réponses:
Je pense que c'est une solution sous-optimale, mais vous pouvez faire
la source
Returns a string representation of the integer argument as an unsigned integer in base 2.
Il n'y a pas de conversion binaire intégrée dans java.util.Formatter, je vous conseillerais d'utiliser String.replace pour remplacer le caractère espace par des zéros, comme dans:
Ou implémentez votre propre logique pour convertir les nombres entiers en représentation binaire avec un remplissage à gauche ajouté quelque part le long des lignes données dans ceci . Ou si vous avez vraiment besoin de passer des nombres au format, vous pouvez convertir votre représentation binaire en BigInteger, puis la formater avec des zéros non significatifs, mais cela coûte très cher à l'exécution, comme dans:
la source
Vous pouvez utiliser Apache Commons StringUtils . Il propose des méthodes de remplissage de chaînes:
la source
J'essayais toutes sortes d'appels de méthode que je n'avais pas vraiment utilisés auparavant pour faire ce travail, ils ont fonctionné avec un succès modéré, jusqu'à ce que je pense à quelque chose qui est si simple que cela pourrait fonctionner, et ça l'a fait!
Je suis sûr que cela a déjà été pensé, je ne sais pas si c'est bon pour une longue chaîne de codes binaires, mais cela fonctionne bien pour les chaînes 16 bits. J'espère que ça aide!! (Notez que le deuxième morceau de code est amélioré)
Merci à Will d'avoir aidé à améliorer cette réponse pour qu'elle fonctionne sans boucle. C'est peut-être un peu maladroit mais cela fonctionne, veuillez améliorer et commenter si vous le pouvez ....
la source
binString.length()
et 16 pour créer une chaîne, puis en ajoutant cette chaîne à binString plutôt qu'en boucle avec quelque chose comme cette réponse: stackoverflow.com/a/2804866/1353098Voici une nouvelle réponse pour un ancien post.
Pour compléter une valeur binaire avec des zéros non significatifs à une longueur spécifique, essayez ceci:
Si
len = 4
etval = 1
,renvoie la chaîne
"10001"
, puissupprime le tout premier caractère. Nous obtenons donc ce que nous voulons:
Si cela
val
est susceptible d'être négatif, essayez plutôt:la source
Une version plus simple de l'idée de user3608934 "Ceci est une vieille astuce, créez une chaîne avec 16 0 puis ajoutez la chaîne binaire découpée que vous avez":
la source
Je ne connais pas la "bonne" solution mais je peux vous proposer un patch rapide.
Je viens de l'essayer et j'ai vu que cela fonctionne bien.
la source
%32s
?essayer...
Je ne pense pas que ce soit la "bonne" façon de faire ça ... mais ça marche :)
la source
0000001111111111
pour la valeur d'entrée1023
Toute valeur plus grande que cela produira la sortie à partirtoBinaryString(1024)
de10000000000
laquelle est trop grand pour leparseInt(...)
Ainsi, l'entrée ne fonctionne que pour 1K sur 64K valeurs d'entrée possiblesUne solution naïve qui fonctionnerait serait
Une autre méthode serait
Cela produira une chaîne de 16 bits de l'entier 5
la source
À partir de Java 11, vous pouvez utiliser la méthode repeat (...) :
Ou, si vous avez besoin d'une représentation 32 bits de n'importe quel entier:
la source
C'est une vieille astuce, créez une chaîne avec 16 0 puis ajoutez la chaîne binaire découpée que vous avez obtenue de String.format ("% s", Integer.toBinaryString (1)) et utilisez les 16 caractères les plus à droite, en supprimant tout début 0. Mieux encore, créez une fonction qui vous permet de spécifier la longueur d'une chaîne binaire souhaitée. Bien sûr, il y a probablement un bazillion d'autres façons d'accomplir cela, y compris des bibliothèques, mais j'ajoute ce post pour aider un ami :)
la source
J'écrirais ma propre classe util avec la méthode comme ci-dessous
}
Production:
La même approche pourrait être appliquée à tous les types intégraux. Faites attention au type de masque
long mask = 1L << i;
la source
Cette méthode convertit un int en une chaîne, longueur = bits. Soit complété avec des 0, soit avec les bits les plus significatifs tronqués.
la source
Vous pouvez utiliser lib https://github.com/kssource/BitSequence . Il accepte un nombre et renvoie une chaîne annulaire, complétée et / ou groupée.
la source
str[i].length()
est la longueur du nombre, disons 2 en binaire, est 01 qui est la longueur 2 change 4 à la longueur maximale souhaitée du nombre. Cela peut être optimisé à O (n). en utilisant continuer.la source
// Ci-dessous traitera les tailles appropriées
la source
la source
numB
etnum
sont égaux et pas différents en aucune façon