其他分享
首页 > 其他分享> > 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为您生成数据文件.

标签:floating-point,arm,android-ndk,endianness,android
来源: https://codeday.me/bug/20191209/2097409.html