首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Motorola Defy上JNI函数的jdouble错误对齐

Motorola Defy上JNI函数的jdouble错误对齐
EN

Stack Overflow用户
提问于 2012-10-01 23:03:15
回答 1查看 255关注 0票数 0

在某些设备上,我遇到了双精度值无法正确传输到C++的问题。看起来双精度值的前半部分被复制到目标变量的后半部分,后半部分被复制到下一个目标变量的前半部分。

问题:

如何更改JNI函数参数的对齐方式?

对感兴趣的读者提供更多详细信息:

所有变量在java中定义为double,在C++文件中定义为jdouble。在所有设备上,ByteOrder.nativeOrder()报告LITTLE_ENDIAN。

在普通设备上,我以相反的顺序得到预期的十六进制字符串:

代码语言:javascript
复制
1A: 2.25   -> expected: 4002000000000000, found: 0000000000000240 (works)

当调用摩托罗拉Defy时,我得到了奇怪的结果。我调用一个有3个jdouble变量的函数。第一次(1A-1C)和第二次运行(2A-2C)如下所示:

代码语言:javascript
复制
1A: 2.25   -> expected: 4002000000000000, found: 005c814000000000
1B: 0.1275 -> expected: 3fc051eb851eb852, found: 0000024052B81E85 (second half of 1B?)
1C: 2.25   -> expected: 4002000000000000, found: EB51C03F00000000 (first half of 1B?)

2A: 5.25   -> expected: 4015000000000000, found: 005C814000000000
2B: 0.3045 -> expected: 3fd37ced916872b1, found: 00001530B1726891 (second half of 2B?)
2C: 5.25   -> expected: 4015000000000000, found: ED7CD33F00000000 (first half of 32?)

对于"expeceted“十六进制字符串,我在Java语言中使用Long.toHexString(Double.doubleToRawLongBits(dV)),给出的结果与使用Robert的链接计算的结果相同。

在有问题的设备(Motorola Defy)上,“预期”值是相同的,因此Java部分似乎工作得很好,但JNI代码中的“发现”值完全不同。我在这里看不到模式,相同的输入导致不同的输出,字节甚至不接近“期望”中的字节。

第一印象是,值永远不会被设置,并且它使用该内存位置上的所有内容?可能的原因是什么以及如何修复它的任何想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-11 05:01:30

通过更改参数顺序修复

(JNIEnv *环境,jclass thiz,jobject bitmap1,jobject bitmap2,jdouble x1,jdouble y1,jdouble x2,jdouble y2)

(JNIEnv *env,jclass thiz,jdouble x1,jdouble y1,jdouble x2,jdouble y2,jobject bitmap1,jobject bitmap2)

看起来位图指针在参数列表的开头或结尾被不同地处理。

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

https://stackoverflow.com/questions/12675854

复制
相关文章

相似问题

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