Java: octets aux flotteurs / ints
J'ai un tableau d'octets envoyés via UDP à partir de x-plane. Les octets (4) sont tous des flotteurs ou des entiers...
J'ai essayé de les jeter à la flotte mais pas de chance jusqu'à présent...
Exemple de tableau:
de données byte[41] = { -66,30,73,0};
Comment puis-je convertir des 4 octets en int ou float et ne flotte pas l'utilisation de 8 octets?
source d'informationauteur JNK
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas le endianness de vos données. @dogbane la solution pourrait fonctionner. Sinon, en gros, vous avez besoin pour obtenir les octets dans un type int, selon l'ordre des octets, par exemple:
Ensuite, vous pouvez transformer à un flotteur à l'aide de ceci:
C'est essentiellement ce qu'
DataInputStream
n'sous les couvertures, mais il suppose que votre octets sont dans un certain ordre.Modifier - Sur bit à Bit OU
L'OP a demandé des éclaircissements sur ce bit à bit OU fait dans ce cas. Alors que c'est un grand sujet qui pourrait être mieux étudiées de manière indépendante, je vais vous donner un bref bref. Ou (
|
) est un opérateur au niveau du bit dont le résultat est l'ensemble de bits individuellement ou-ing chaque bit des deux opérandes.E. g. (en binaire)
Quand je suggère de l'utiliser au-dessus, il consiste à déplacer chaque octet dans une position unique dans l'int. Donc, si vous aviez les octets
{0x01, 0x02, 0x03, 0x04}
qui en binaire est{00000001, 00000010, 00000011, 00000100}
vous avez ceci:Lorsque vous OU deux chiffres et vous savoir que deux bits correspondants sont définies dans les deux (comme c'est le cas ici), OU au niveau du bit est le même que plus.
Voir Aussi
Vous voudrez probablement faire usage de java.nio.ByteBuffer. Il a beaucoup de pratique des méthodes pour extraire les différents types d'un tableau d'octets, et doivent également traiter la plupart des problèmes de l'endianness pour vous (y compris le passage de l'octet de commande si nécessaire).
Il a aussi des caractéristiques de fantaisie pour la conversion de votre tableau d'octets dans un tableau int (via un IntBuffer de la asIntBuffer() la méthode) ou float array (via un FloatBuffer de la asFloatBuffer ()) si vous savez que l'entrée est vraiment tous d'un type.
Utiliser un
DataInputStream
comme suit:Vous ne pouvez pas les jeter dans un float/int. Vous devez convertir les octets dans un int ou float.
Voici une façon simple de le faire:
Il est raisonnable de discussion ici:
http://www.velocityreviews.com/forums/t129791-convert-a-byte-array-to-a-float.html