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为您生成数据文件.

相关文章

文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...
文章浏览阅读8.9w次,点赞4次,收藏43次。前言:在Android上...
文章浏览阅读1.1w次,点赞4次,收藏17次。Android Studio提供...