【问题标题】:flash alchemy: passing array of floatsflash alchemy:传递浮点数数组
【发布时间】:2012-08-21 14:32:12
【问题描述】:

不起作用:

             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 输出: ** processFloat size: 4 sFile: 0.000, res:4

怎么了?如何将浮点数组从闪存传递给 swc?

【问题讨论】:

    标签: adobe swc alchemy


    【解决方案1】:

    你的问题是字节顺序(更多细节here)。您需要将 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??)。

    【讨论】:

    • 你说得对,b.endian = Endian.LITTLE_ENDIAN 解决了​​这个问题。浮动 * sFile = (float *)malloc(sizeof(float) * (iTestSize + 1));替换为 float * sFile = (float *)malloc(sizeof(char) * iTestSize);也没有问题。谢谢!
    猜你喜欢
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2014-08-19
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多