【问题标题】:How to detect endianness from JNI code?如何从 JNI 代码中检测字节顺序?
【发布时间】:2015-09-10 23:07:24
【问题描述】:

我需要通过JNI调用原生函数int getSize(uint_64& out)。这里显然有一些问题,我打算通过将byte[] 传递给JNI 代码,用uint64_t &out 的值填充它,然后从结果中创建一个BigInteger 来解决。因此,我从 Java 调用 getSize(byte[] size),在 JNI C 代码中将新的 uint64_t 传递给 getSize(uint64_t& out),然后将值从它复制回字节数组,最后我从这个字节数组中创建一个 BigInteger。我的问题是如何将uint64_t 值复制到字节数组中?我知道在 Java 端,值必须是大端顺序,但我如何确定 uint64_t 的字节顺序是什么?

【问题讨论】:

    标签: java c++ java-native-interface


    【解决方案1】:

    uint64_t 的字节顺序当然是本机字节顺序,但您在这里根本不需要处理字节顺序。只需从您的本机方法返回 jlong 即可。它将以 Java 代码中的大端顺序到达,Java 代码可以按照您喜欢的方式处理它。

    【讨论】:

    • 哇!这正是问题所在,我们现在需要确保首先将任何网络数据包 IP 转换为 Host-Endian(在 ARMv7 Android 的情况下为 Little-Endian),因为 Java 会自动将其转换回 Big-Endian(Net-Endian)。
    猜你喜欢
    • 2015-12-09
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多