Pergunta

Estou planejando armazenar meus dados em um formato binário como recurso, leio -os em um buffer int e basicamente o passa diretamente para uma função C ++ nativa, que pode lançá -lo para uma estrutura/classe e trabalhar com ele. Sem ponteiros , obviamente, apenas ints e flutuadores.

A questão é - que tipo de consertar eu preciso fazer? Suponho que preciso verificar ByteOrder.nativeOrder(), descubra se é Big Endian ou Little Endian e faça troca de bytes, se necessário.

Fora isso, presumivelmente é garantido que os carros alegóricos são esperados no formato IEEE 754? Existem outras advertências que estou completamente negligenciando aqui?

(Também - como estou compilando usando o NDK, sei que arquitetura já é (ARMV7 -A, no meu caso), então posso tecnicamente pular as travessuras Endian e apenas pegar os dados da maneira que é?)

Foi útil?

Solução

Suporte ao braço Big e Little Endian. Provavelmente, isso será definido pelo sistema operacional, por isso pode valer a pena verificar isso de antemão.

Há também a questão do preenchimento no tamanho da palavra em uma estrutura:

struct st
{
  char a;
  int  b;
};

terá um sizeof 8 e não os 5 bytes esperados. Isso é para que o int seja alinhado com a palavra. Geralmente alinham tudo a 4 bytes e provavelmente usam o atributo embalado do GCC (struct my_packed_struct __attribute__ ((__packed__)) ) também. Isso garantirá que os internos da estrutura sejam como você espera.

Alternativamente, use o simulador Android para gerar o arquivo de dados para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top