BigInteger à byte []
J'ai besoin de convertir un Java BigInteger instance de sa valeur en octets. À partir de l'API, je reçois cette méthode toByteArray()
qui renvoie un byte[] contenant le complément à deux de la représentation de cette BigInteger.
Depuis tous mes chiffres sont positifs 128 bits (16 octets) entier, je n'ai pas besoin de la 2-forme de complément qui me donnent 128 bits + bit de signe (129 bits)...
Est-il un moyen pour obtenir le standard (sans la 2-forme de complément) représentation directement à partir d'un BigInteger?
Si non, comment puis-je droit de modifier l'ensemble du byte[17] tableau de perdre le bit de signe afin d'obtenir un byte[16] tableau?
source d'informationauteur Kami
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas de changement du tout. Le bit de signe est la plus importante (= gauche) peu de votre tableau d'octets. Puisque vous savez que vos numéros de toujours être positif, il est garanti à 0. Toutefois, le tableau dans son ensemble est aligné à droite.
Il y a donc deux cas: à gauche de l'octet 0x00 ou pas. Si c'est 0x00 vous pouvez déposer:
Si elle n'est pas égal à 0, vous ne pouvez pas tomber - mais votre tableau sera déjà dans la représentation que vous voulez, de sorte que vous n'avez pas à faire quoi que ce soit.
Le code ci-dessus devrait fonctionner pour les deux cas.
La première (la plus importante) de l'octet dans le tableau d'octets peuvent non seulement contenir le bit de signe, mais c'est normal bits.
E. g. cette BigInteger:
a cette séquence de bits:
00000010 00010001
C'est à dire le haut de l'octet (avec le bit de signe), a aussi "normal" des bits comme vous le souhaitez.
Alors, que voulez-vous revenir?
Vous pouvez copier le premier octet. Ou vous pouvez simplement l'ignorer.