J'essaie de représenter le résultat d'un hachage MD5 dans la chaîne la plus courte possible. Il semble que ce soit un gaspillage de le transformer en une chaîne hexagonale et de laisser G à Z aller à perdre.Puis-je construire un BigInt avec un tableau d'octets (Scala)?
Une idée que j'ai eu est d'obtenir le hachage MD5 de mon entrée comme un tableau d'octets et de construire un BigInt
avec elle. Je peux alors appeler toString(36)
, et obtenir le nombre comme base-36 dans une chaîne (-?[0-9a-z]*
, le nombre peut être positif ou négatif). Ça marche pour moi.
Le problème est, je ne suis pas sûr qu'un BigInt
peut être construit avec n'importe quel tableau d'octets, et je ne peux pas le prouver avec des tests (du moins pas en temps opportun!). Je suppose que oui, parce que je comprends qu'un BigInt peut être de taille arbitraire. Je ne peux pas utiliser cette méthode jusqu'à ce que je sache avec certitude qu'il fonctionnera pour toutes les sorties possibles. Donc, quelqu'un peut-il me dire si cela fonctionnera pour toutes les entrées (ou comment convertir facilement un tableau d'octets pour qu'il puisse être représenté en base 36).
Précision: J'ai la mise en œuvre, je demande sur le comportement sur l'ensemble du domaine (à savoir 00000000000000000000000000000000 à FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
La mise en œuvre que vous décrivez ne ne fonctionnera pas sur tout le domaine, mais vous pouvez le faire fonctionner par padding la tête du tableau avec un SOH (0x01) octet comme indiqué dans la réponse ci-dessous. –