android - native 类型的二进制表示是否保证在所有目标上都相同?

标签 android floating-point android-ndk arm endianness

我计划将我的数据以二进制格式存储为资源,将其读入一个 int 缓冲区并基本上将其直接传递给 native C++ 函数,该函数可能会将其转换为结构/类并使用它. 显然没有指针,只有整数和 float 。

问题是 - 我需要做什么样的修复?我想我需要检查 ByteOrder.nativeOrder(),弄清楚它是大端还是小端,并在需要时执行字节交换。

除此之外,大概可以保证 float 符合 IEEE 754 格式?我在这里完全忽略了其他任何注意事项吗?

(另外 - 因为我正在使用 NDK 进行编译,所以我知道它已经是什么架构(在我的例子中是 ARMv7-A),所以我可以在技术上跳过字节顺序的恶作剧并按原样获取数据吗? )

最佳答案

ARM 支持大端和小端。这很可能由操作系统设置,因此可能值得事先检查一下。

还有一个结构体中的字长填充问题:

struct st
{
  char a;
  int  b;
};

将有一个 sizeof 8 而不是预期的 5 个字节。这是为了使 int 字对齐。通常将所有内容对齐到 4 个字节,并可能使用 gcc 打包属性 (struct my_packed_struct __attribute__ ((__packed__)) )也是如此。这将确保该结构的内部结构符合您的预期。

或者使用 Android 模拟器为您生成数据文件。

关于android - native 类型的二进制表示是否保证在所有目标上都相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3411704/

相关文章:

android - 查询购买商品时获取订单ID

java - 在 Android Wear OS(即 CSV)上保存和传输智能 watch 传感器数据的最佳方式是什么?

java - 光标!= null 但null?

android - 在 TimerTask 中启动 AsyncTask

c++ - 为什么这个操作没有给我更高的精度?

.net - C double 与 .NET double 不同吗?

python float 到 in int 转换

android - Android NDK 的最新 C++11 功能

android-ndk - Android 中的 JNI_CreateJavaVM()

android - DetachCurrentThread 有时会在 NDK 中崩溃