我有二进制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()
答案 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拥有我需要的大部分东西(可能事先有点变化)