0

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

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

例如:

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 库,而是四处寻找一些 Javascript 代码,这些代码只需在 AS3 中进行少量修改即可工作。

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

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 回答