Гарантируется ли одинаковое двоичное представление нативных типов для всех целей? - PullRequest
3 голосов
/ 05 августа 2010

Я планирую сохранить мои данные в двоичном формате в качестве ресурса, прочитать их в буфер int и в основном передать их непосредственно в собственную функцию C ++, которая может привести их к struct / class и работать с ними Очевидно, никаких указателей, только целые и плавающие.

Вопрос в том, что мне нужно сделать? Я полагаю, что мне нужно проверить ByteOrder.nativeOrder(), выяснить, является ли он прямым или младшим, и, если необходимо, выполнить замену байтов.

Кроме этого, предположительно гарантируется, что числа с плавающей запятой будут в формате IEEE 754? Есть ли еще какие-то предостережения, которые я здесь полностью игнорирую?

(Кроме того - поскольку я компилирую с использованием NDK, я знаю, какая у него архитектура (ARMv7-A, в моем случае), так что я могу технически пропустить эндианозные махинации и просто взять данные такими, какие они есть? )

1 Ответ

3 голосов
/ 05 августа 2010

ARM поддерживает как big, так и littleianian.Скорее всего, это будет установлено ОС, поэтому стоит проверить это заранее.

Существует также проблема заполнения до размера слова в структуре:

struct st
{
  char a;
  int  b;
};

будетиметь sizeof 8, а не ожидаемые 5 байтов.Это так, что int будет выровнен по слову.Обычно выровняйте все по 4 байта и, возможно, также используйте атрибут gcc pack (struct my_packed_struct __attribute__ ((__packed__)) ).Это гарантирует, что внутренняя структура структуры соответствует вашим ожиданиям.

Либо используйте Android Simulator для создания файла данных для вас.

...