J'essaie de comprendre pourquoi String.format()
se comporte comme il le fait.
Contexte: classe de programmation système, écriture d'un assembleur.
Il y a un champ hexagonal de 5 caractères dans le fichier objet, que je crée à partir d'une valeur.
Essayé avec: String.format("%05X", decInt);
Cela fonctionne comme prévu pour les nombres positifs (11 -> 0000B
) Cependant, cela échoue pour les nombres négatifs (-1 -> FFFFFFFF
au lieu de FFFFF
)
Je suppose que je pourrais juste prendre une sous-chaîne des 5 derniers caractères, mais je voudrais tout de même comprendre pourquoi cela se comporte de cette façon.
La largeur utilisée dans le format est toujours une largeur minimale. Dans ce cas, au lieu d'utiliser des opérations de sous-chaîne, je suggérerais:
String.format("%05X", decInt & 0xFFFFF);
La largeur du format ne fonctionne que pour créer un nombre minimum de chiffres et n'a d'effet que sur les zéros au début.
Au lieu de la sous-chaîne, vous pouvez utiliser un masque de bits:
String.format("%05X", decInt & 0x0FFFFF)
Au fait, 11
-> 0000B
, ne pas 0000A
comme indiqué dans votre question.