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

前端之家收集整理的这篇文章主要介绍了android-本机类型的二进制表示形式是否在所有目标上都保证相同? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我打算将数据以二进制格式存储为资源,将其读取到int缓冲区中,然后基本上直接将其传递给本机C函数,该函数可能将其转换为struct / class并使用它.没有指针,显然,只是整数和浮点数.

问题是-我需要做哪种修复?我想我需要检查ByteOrder.nativeOrder(),找出它是大字节序还是小字节序,并在需要时执行字节交换.

除此之外,是否可以保证以IEEE 754格式预期浮点数?我在这里还有其他需要注意的地方吗?

(而且-由于我正在使用NDK进行编译,因此我知道它已经是什么体系结构(以我的情况为ARMv7-A),所以我可以从技术上跳过字节序的端头而只是按原样获取数据吗?)

最佳答案
ARM支持大小端.这很可能由操作系统设置,因此在事先检查时可能值得.

在结构中还存在填充到单词大小的问题:

struct st
{
  char a;
  int  b;
};

将具有8的大小,而不是预期的5个字节.这样一来,int就会被字对齐.通常将所有内容对齐为4个字节,并可能使用gcc打包属性(struct my_packed_struct __attribute__((__packed__))
).这将确保结构的内部结构符合您的期望.

或者,使用Android Simulator为您生成数据文件.

猜你在找的Android相关文章