Pergunta

Eu tenho binário C / C ++ tipos de dados (por exemplo, na versão memória de um flutuador C) que eu preciso ler em ActionScript 3 e prefere não código este a partir do zero.

Alguém sabe de quaisquer bibliotecas, código de exemplo, o código pseudo para ajudar com isso?

Por exemplo:

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() 
Foi útil?

Solução 2

Eu fiz um pouco mais a cavar em volta e descobriu que ByteArray tem mais do que eu preciso (possivelmente com alguma bit deslocando antemão)

Outras dicas

A AS3 Número conforma classe para IEEE 754 , e é idêntica à classe número Javascript.

Ao invés de busca de bibliotecas AS3, eu cavei em torno de algum código Javascript que deve funcionar com modificação apenas menor em AS3.

Na neste site eu encontrei este analisador flutuador de alta densidade vez:

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

Se você preferir que seu código seja debuggable, bem como funcional, você pode encontrar este código para ser mais útil em seu lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top