2009-08-11 36 views
0

我有二進制C/C++數據類型(例如在C浮點的內存版本中),我需要讀入Actionscript 3,並且不希望從頭編碼。在Actionscript 3中讀取二進制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() 

回答

0

我做了一些更多的挖掘,發現ByteArray擁有我所需要的大部分內容(可能會事先進行一些位移)

0

的AS3 Number類符合IEEE 754,並且是相同的的Javascript數類。

我沒有搜索AS3庫,而是搜索了一些只能在AS3中稍作修改的Javascript代碼。

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是更有幫助吧。