2009-08-14 2 views
0

Est-il possible d'obtenir les octets bruts d'un objet Number à virgule flottante (IEEE-754) dans Actionscript? Ou alternativement, si je peux obtenir le signe (1 bit), la mantisse (52 bits) et l'exposant (11 bits), alors je peux faire le bitshifting moi-même et construire le tableau d'octets bruts. Je voudrais créer des représentations précises et compactes des valeurs numériques (hex, base-36, base-64, etc.) pour certaines situations de sérialisation.Représentation numérique à virgule flottante dans Actionscript?

Je pourrais aussi être intéressé par la construction de flotteurs compacts de 16 bits (demi-précision IEEE) et leur intégration dans des réseaux d'octets denses.

Par exemple, en Java, je pourrais écrire du code comme ceci pour créer des représentations de chaînes précises de doubles:

public static String hexRepresentation(double value) { 
    long bits = Double.doubleToLongBits(value); 
    String hex = Long.toHexString(bits); 
    return hex; 
} 

public static String b36Representation(double value) { 
    long bits = Double.doubleToLongBits(value); 
    String hex = Long.toString(bits, 36); 
    return hex; 
} 

public static void main(String[] args) { 
    System.out.println(hexRepresentation(123.456)); // 405edd2f1a9fbe77 
    System.out.println(hexRepresentation(Math.PI)); // 400921fb54442d18 

    System.out.println(); 

    System.out.println(b36Representation(123.456)); // z8nf9qi2e5pz 
    System.out.println(b36Representation(Math.PI)); // z21th0e6pjiw 
} 

Si quelqu'un a des idées sur la façon d'accomplir la même chose en actionscript, j'aimerais à savoir. Mais jusqu'à présent, cela ne semble pas possible. Qu'en est-il de ces nouveaux opcodes dans le FP10 pour Alchemy? Y a-t-il quelque chose qui vous permet d'obtenir les octets bruts d'une manière ou d'une autre?

Répondre

1

Je suis assez sûr que vous pourriez le faire juste en créant un bytearray, puis en appelant writeFloat dessus. Vous pouvez ensuite lire chaque octet avec readByte, puis déplacer et masquer si nécessaire pour obtenir exactement ce que vous voulez.

+0

Ah. Bien sûr! C'est juste comme jeter un pointeur float à un pointeur int en C. Très agréable. – benjismith