Флеш алхимия: прохождение массива чисел

Не работает:

             var b:ByteArray = new ByteArray();
             b.writeFloat(-50.000000);
             b.position = 0;


             cpp.processFloat(b,b.bytesAvailable);

CPP:

static AS3_Val processFloat(void* self, AS3_Val args){
unsigned iTestSize;
AS3_Val sOrigFile = AS3_Undefined();

AS3_ArrayValue( args, "AS3ValType, IntType", &sOrigFile, &iTestSize );

float * sFile = (float *)malloc(sizeof(float) * (iTestSize + 1));

int res = AS3_ByteArray_readBytes(sFile, sOrigFile, iTestSize);

fprintf( stderr, "** processFloat() size: %i sFile: %.03f, res:%i\n", iTestSize, sFile, res );

Выход fprintf: ** Размер файла процесса: 4 s Файл: 0,000, разрешение: 4

В чем дело? Как я могу передать массив с плавающей точкой в ​​SWC от Flash?

1 ответ

Решение

Ваша проблема в порядке байтов (более подробно здесь). Вам нужно установить ByteArray в Little Endian:

var b:ByteArray = new ByteArray();
b.endian= Endian.LITTLE_ENDIAN;
b.writeFloat(-50.000000);
b.position = 0;

cpp.processFloat(b,b.bytesAvailable);

Кроме того, ваш iTestSize в замешательстве. Вы проходите в bytesAvailable но тогда вы умножаете это на sizeof(float) (и добавить 1??).

Другие вопросы по тегам