La conversion de 32 bits entier non signé (big endian) à long et à l'arrière
J'ai un byte[4] qui contient un 32 bits entier non signé (big endian) et j'ai besoin de le convertir à la longue (comme int ne peuvent pas contenir un nombre non signé).
Aussi, comment dois-je faire vice-versa (c'est à dire de long qui contient un 32 bits entier non signé en byte[4])?
d'où le tableau d'octets à venir?
à partir d'un fichier
à partir d'un fichier
OriginalL'auteur Aviram | 2012-03-24
Vous devez vous connecter pour publier un commentaire.
Sonne comme un travail pour le ByteBuffer.
Un peu comme
int value = buffer.getInt();
puis int pourrait ne pas être en mesure de contenir le nombre entier (s'il est non signé et non signé).Un entier en Java est de 32 bits (4 octets), aussi longtemps que votre ByteBuffer est de 4 octets de long, je ne vois pas pourquoi il devrait y avoir un problème. J'ai amélioré ma réponse et je l'ai testé avec des points positifs et négatifs et il fonctionne très bien jusqu'à présent. - Je raté quelque chose? Si vous avez l'intention d'utiliser des entiers non signés ensuite utiliser longs et pas des entiers, parce que les entiers en Java sont signés.
Vous pouvez utiliser
return buffer.getInt() & 0xFFFFFFFFL;
que vous obtiendrez toujours la valeur non signée. ByteBuffer sont BIG_ENDIAN par défaut. Vous n'avez pas besoin d'appelerflip()
à utiliserarray()
Pourquoi toLong(Integer.MIN_VALUE) ne fonctionne pas? ideone.com/cERLo1
OriginalL'auteur Edwin Dalorzo
Vous pouvez utiliser ByteBuffer, ou vous pouvez le faire à l'ancienne:
OriginalL'auteur Hot Licks
Goyave a classes utiles pour traiter avec unsigned des valeurs numériques.
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/primitives/UnsignedInts.html#toLong(int)
Pourquoi toLong(Integer.MIN_VALUE) ne fonctionne pas? et de retour négatif à long ideone.com/cERLo1
OriginalL'auteur Sam Barnum