Actionscript中的浮点数字表示?

时间:2009-08-14 23:14:55

标签: actionscript-3 floating-point

是否可以在Actionscript中获取浮点(IEEE-754)Number对象的原始字节?

或者,如果我能得到符号(1位),尾数(52位)和指数(11位),那么我可以自己做位移并构造原始字节数组。

我想为某些序列化情况创建Number值(十六进制,base-36,base-64等)的精确,紧凑的字符串表示。

我可能也有兴趣构建紧凑的16位浮点数(IEEE半精度)并将它们打包成密集的字节数组。

例如,在Java中,我可能会编写这样的代码来创建双精度字符串表示:

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
}

如果有人对如何在动作中完成同样的事情有任何想法,我很想知道。但到目前为止,似乎不可能。 FP10 for Alchemy中的那些新操作码怎么样?有没有什么可以让你以某种方式得到原始字节?

1 个答案:

答案 0 :(得分:1)

我很确定你可以通过创建一个bytearray然后在其上调用writeFloat来做到这一点。然后,您可以使用readByte读取每个字节,然后根据需要进行移位和屏蔽,以获得您想要的内容。