2009-08-14 16 views
0

浮動小数点(IEEE-754)Numberオブジェクトの生のバイトをActionscriptで取得できますか?Actionscriptの浮動小数点数値表現ですか?

また、符号(1ビット)、仮数(52ビット)、指数(11ビット)を得ることができれば、ビットシフトを行い、生のバイト配列を構築できます。

私は、特定のシリアライズの状況でNumber値(16進数、36進数、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 
} 

誰もがActionScriptで同じことを実現する方法のための任意のアイデアを持っている場合、私は大好きです知っている。しかし、今のところそれは可能ではないようです。 AlchemyのFP10の新しいオペコードはどうですか?あなたは何とか生のバイトを得ることができる何かがありますか?

答えて

1

bytearrayを作成してwriteFloatを呼び出すだけで、これを行うことができます。その後、必要に応じてreadByteで各バイトを読み取り、必要に応じてシフトしてマスクして、必要なものを正確に取得することができます。

+0

Ah。もちろん!これは、Cのintポインタへのfloatポインタのキャストと同じです。とてもいいです。 – benjismith

関連する問題