我计划将我的数据以二进制格式存储为资源,将其读入一个 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/