所有目标上的本机类型的二进制表示是否保证相同?

时间:2010-08-05 04:16:04

标签: android floating-point android-ndk arm endianness

我计划将数据以二进制格式存储为资源,将其读入int缓冲区并基本上将其直接传递给本机C ++函数,该函数可能将其转换为struct / class并使用它没有任何指针,显然,只是整数和浮动。

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

除此之外,据推测,浮标可以保证符合IEEE 754格式吗?还有其他警告我完全忽略了吗?

(另外 - 因为我正在使用NDK编译,我知道它已经是什么架构(在我的情况下是ARMv7-A),所以我在技术上可以跳过endian shenanigans并且只是按照它的方式获取数据吗? )

1 个答案:

答案 0 :(得分:3)

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

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

struct st
{
  char a;
  int  b;
};

将具有sizeof 8而不是预期的5个字节。这样int将是单词对齐的。通常将所有内容对齐到4个字节,并且可能也使用gcc packed属性(struct my_packed_struct __attribute__ ((__packed__)) )。这将确保结构的内部结构符合您的预期。

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