首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >,使用FloatBuffer作为参数。

,使用FloatBuffer作为参数。
EN

Stack Overflow用户
提问于 2015-12-09 00:37:41
回答 1查看 901关注 0票数 0

我正在使用NDK和本机缓冲区。我有以下代码:

使用本机方法的Java类定义:

代码语言:javascript
复制
public class MyNDK {

    static {
        System.loadLibrary("MyLibrary");
    }

    public native void workWithFloatBuffer(FloatBuffer buffer, int base, int size);

}

本机代码实现(我已经测试了它的定义,它很好):

代码语言:javascript
复制
JNIEXPORT void JNICALL Java_com_example_xcesco_myapplication_MyNDK_workWithFloatBuffer(JNIEnv *env, jobject object, jobject input, jint base, jint size)
{
    jfloat *buffer =(jfloat *) env->GetDirectBufferAddress(input);

    for (int i=base;i<size;i++)
    {
        buffer[i]=i*2.0f;
    }
}

以及用于测试结果的活动中使用的代码:

代码语言:javascript
复制
    FloatBuffer buffer= ByteBuffer.allocateDirect(4*10).asFloatBuffer();
    (new MyNDK()).workWithFloatBuffer(buffer, 0,4);

    for (int i=0; i< 4;i++) {
        Log.i("BLA", "value["+i+"]="+buffer.get(i));
    }

当前日志上的结果是:

代码语言:javascript
复制
value[0]=0.0
value[1]=9.0E-44
value[2]=4.6007E-41
value[3]=6.8966E-41

这与

代码语言:javascript
复制
value[0]=0.0
value[1]=2
value[2]=4
value[3]=6

怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 09:55:40

查看浮子转换器中的值是有用的:

9.0E-44等于0x00000040

4.6007E-41等于0x00008040

2.0等于0x40000000

4.0等于0x40800000

你现在看到的是一个令人着迷的问题。您可以尝试按以下方式声明您的FloatBuffer

代码语言:javascript
复制
FloatBuffer buffer = ByteBuffer.allocateDirect(16)
                               .order(ByteOrder.LITTLE_ENDIAN)
                               .asFloatBuffer();

或者,如果您愿意的话,可以逆转C++代码中的值的特性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34168791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档