Comment faire pour convertir un float dans un tableau d'octets, et vice-versa?
Je suis en train de convertir un float
dans une primitive byte[]
et vice versa:
public byte[] floatToByteArray(final float value)
{
return new byte[]
{
(byte) (value >> 56),
(byte) (value >> 48),
(byte) (value >> 40),
(byte) (value >> 32),
(byte) (value >> 24),
(byte) (value >> 16),
(byte) (value >> 8),
(byte) (value)
};
}
Curieusement, quand j'ai essayer de déplacer le nouvellement allouée byte[]
de retour dans une float
, le résultat n'est que de la foutaise.
Cependant, il semble que le même algorithme fonctionne très bien lorsque j'utilise la primitive long
type de données en argument à la place.
public byte[] longToByteArray(final long value)
{
return new byte[]
{
(byte) (value >> 56),
(byte) (value >> 48),
(byte) (value >> 40),
(byte) (value >> 32),
(byte) (value >> 24),
(byte) (value >> 16),
(byte) (value >> 8),
(byte) (value)
};
}
- comment avez-vous testé la fonction ?
- avez-vous ajouter
f
à la fin de l'essai, les données float2ByteArray (3.4 f) - Je commence à aimer C maintenant.
char* floatAsByte = (char*)&myFloat;
- Les flotteurs sont en 32 bits, donc obtenir l'int bits docs.oracle.com/javase/6/docs/api/java/lang/... et utiliser une méthode similaire comme vous l'avez fait pour longtemps, mais au lieu de l'int.
Vous devez vous connecter pour publier un commentaire.
L'utilisation de ces à la place.
Juste pour ajouter un basé sur @shazin solution. Convertir un float tableau dans un tableau d'octets:
Il l'habitude de travailler. Flotteur.byteValue tronque simplement flotter valeur de 1 byte
En outre, il n'est pas clair quels octets que vous voulez. Est-il conforme à IEEE 754 en virgule flottante simple flotteur peu de mise en page? Ensuite, vous pouvez d'abord le convertir en int
ensuite utiliser déplace à diviser en 4 octets 8 octets comme vous l'avez fait
floatToIntBits
juste ce dont j'ai besoin.Également basé sur Shazin solution, avec des précisions supplémentaires sur l'ordre des octets:
ou
Je ne peux pas le voir facile-à-utiliser des méthodes. Il travaille: