在Actionscript 3中读取二进制C float?

时间:2009-08-11 19:03:36

标签: c++ actionscript-3 file-io floating-point binary-data

我有二进制C / C ++数据类型(例如在C float的内存版本中),我需要读入Actionscript 3并且不想从头开始编写代码。

任何人都知道任何库,示例代码,伪代码来帮助解决这个问题吗?

例如:

C / C ++ app:

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

Actionscript 3 app:

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

2 个答案:

答案 0 :(得分:0)

AS3 Number类符合IEEE 754,与Javascript编号类相同。

我没有搜索AS3库,而是挖掘了一些Javascript代码,这些代码只能在AS3中进行少量修改。

this site上我发现了这个相当高密度的浮点解析器:

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 );
};

如果您希望代码既可以调试也可以使用,您可能会发现this code更有用。

答案 1 :(得分:0)

我做了更多的挖掘,发现ByteArray拥有我需要的大部分东西(可能事先有点变化)