0

Actionscript 3 に読み込む必要があるバイナリ C/C++ データ型 (C float のメモリ バージョンなど) があり、これを最初からコーディングしたくありません。

これに役立つライブラリ、サンプルコード、疑似コードを知っている人はいますか?

例えば:

C/C++ アプリ:

float f = 1.1;
SaveFloatToFile(f, 'myfile.bin');

Actionscript 3 アプリ:

var ba:ByteArray = ReadFromFile('myfile.bin');
var f:Float = ParseFloat(ba); // I need code for ParseFloat() 
4

2 に答える 2

0

AS3 NumberクラスはIEEE 754に準拠しており、Javascript の Number クラスと同じです。

AS3 ライブラリを検索するのではなく、AS3 でわずかな変更を加えるだけで動作する Javascript コードを探しました。

このサイトで、かなり高密度の float パーサーを見つけました。

p.decodeFloat = function( data, precisionBits, exponentBits ){
    var b = new this.Buffer( this.bigEndian, data );
    b.checkBuffer( precisionBits + exponentBits + 1 );
    var bias = Math.pow( 2, exponentBits - 1 ) - 1, signal = b.readBits( precisionBits + exponentBits, 1 ), exponent = b.readBits( precisionBits, exponentBits ), significand = 0,
    divisor = 2, curByte = b.buffer.length + ( -precisionBits >> 3 ) - 1;
    do
        for( var byteValue = b.buffer[ ++curByte ], startBit = precisionBits % 8 || 8, mask = 1 << startBit; mask >>= 1; ( byteValue & mask ) && ( significand += 1 / divisor ), divisor *= 2 );
    while( precisionBits -= startBit );
    return exponent == ( bias << 1 ) + 1 ? significand ? NaN : signal ? -Infinity : +Infinity : ( 1 + signal * -2 ) * ( exponent || significand ? !exponent ? Math.pow( 2, -bias + 1 ) * significand : Math.pow( 2, exponent - bias ) * ( 1 + significand ) : 0 );
};

コードを機能的であると同時にデバッグ可能にしたい場合は、代わりにこのコードがより役立つことがあります。

于 2009-08-11T20:12:58.223 に答える
0

私はさらに掘り下げて、ByteArrayに必要なもののほとんどがあることを発見しました(おそらく、事前にビットシフトが行われている可能性があります)

于 2009-08-11T22:22:48.273 に答える