BigInteger.méthode toString est la suppression de 0
Je suis en train de générer la somme MD5 à l'aide de MessageDigest.
Et je vais avoir des code suivant.
byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
output = bigInt.toString(16);
Cela renvoie pas 32 chaîne de caractères mais un 31 chaîne de caractères 8611c0b0832bce5a19ceee626a403a7
Chaîne attendue est 08611c0b0832bce5a19ceee626a403a7
0 est manquant dans la sortie.
J'ai essayé l'autre méthode
byte[] md5sum = digest.digest();
output = new String(Hex.encodeHex(md5sum));
Et la sortie est aussi prévue.
J'ai vérifié le doc et Entier.toString ne la conversion selon elle
Les chiffres de mappage de caractères fournis par Caractère.forDigit est
utilisé, et d'un signe moins est ajouté le cas échéant.
et dans le Caractère.forDigit methos
Le chiffre argument est valable que si 0 <=chiffres < radix.
Peut-on me dire comment les deux méthodes sont différentes et pourquoi 0 est supprimé?
- Dites-vous que
BigInteger.toString()
est supposé afficher un zéro? - Tout ce que je demande est pourquoi toString est d'enlever le premier 0. ?
- Ouais, eh bien, et je reçois un vote négatif, comme si il n'est pas utile. Boohoo
- Je ne comprends pas ce que vous demandez. Comment est
toString
censé savoir que vous vous attendez à un 0?BigInteger
magasins juste un nombre; il ne sait pas combien de zéros que vous êtes enceinte. - Penser d'une autre façon: qu'attendez-vous de
new BigInteger("27").toString()
? Combien de zéros?
Vous devez vous connecter pour publier un commentaire.
Personnellement, je ne éviter à l'aide de
BigInteger
de convertir des données binaires de texte. Ce n'est pas vraiment ce qu'il est là, même si elle peut être utilisé pour cela. Il y a beaucoup de code disponible pour convertir unbyte[]
à sa représentation hexadécimale - par exemple à l'aide de Apache Commons Codec ou une simple et unique méthode:où
C'est supprimée, parce que le zéro n'est pas significatif, selon
BigInteger
. Il n'y a pas de différence entre27
et000000000027
.Si vous souhaitez une longueur spécifique, vous aurez à force de vous-même, avec quelque chose comme:
(encombrants mais c'est).
Supprimés zéro est remplacée à l'aide de ce code:
boucle sera prise en compte pour autant de zéros que nécessaire