2009-08-11 9 views
0

Ich habe binäre C/C++ - Datentypen (z. B. in der Speicherversion eines C-Floats), die ich in Actionscript 3 lesen muss, und würde es vorziehen, dies nicht von Grund auf neu zu programmieren.Lesen Sie binäre C float in Actionscript 3?

Wer weiß von Bibliotheken, Beispielcode, Pseudocode, um damit zu helfen?

Zum Beispiel:

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() 

Antwort

0

Ich habe ein wenig mehr gegraben und festgestellt, dass ByteArray hat das meiste von dem, was ich brauche (möglicherweise mit ein bisschen Verschiebung vorher)

0

Die AS3 Number Klasse entspricht IEEE 754, und ist identisch mit der Javascript-Nummer Klasse .

Anstatt nach AS3-Bibliotheken zu suchen, habe ich nach Javascript-Code gesucht, der mit nur geringen Änderungen in AS3 funktionieren sollte.

Auf this site fand ich diesen ziemlich hohe Dichte float-Parser:

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

Wenn Sie Ihren Code bevorzugen debug sowie funktionsfähig zu sein, können Sie this code seine hilfreichen, statt zu finden.