È la rappresentazione binaria di tipi nativi garantito lo stesso su tutti gli obiettivi?
-
26-09-2019 - |
Domanda
I "pianificazione m per memorizzare i miei dati in un formato binario come una risorsa, leggerlo in un buffer int e fondamentalmente passarlo verso il basso ad un nativo C ++ funzione, che potrebbe lanciare ad una struct / classe e lavorare con esso . Non ci sono puntatori, ovviamente, solo int e carri allegorici.
La domanda è - che tipo di fissaggio fino devo fare? Suppongo che ho bisogno di controllare ByteOrder.nativeOrder()
, capire se si tratta di big endian o little endian, ed eseguire di byte-swapping in caso di necessità.
Oltre a questo, galleggianti sono presumibilmente garantiti da aspettarselo in formato IEEE 754? Ci sono altri avvertimenti Sono completamente affacciano qui?
(anche - dal momento che sto compilando utilizzando l'NDK, so ciò che l'architettura sia già (ARMv7-A, nel mio caso), in modo da posso tecnicamente saltare gli imbrogli endian e basta prendere i dati così com'è? )
Soluzione
braccio di supporto sia grande e little endian. Questo sarà molto probabilmente essere impostato dal sistema operativo quindi potrebbe essere la pena di controllare questo fuori in anticipo.
C'è anche la questione di imbottitura a misura parola in una struttura:
struct st
{
char a;
int b;
};
avrà un sizeof
8 e non gli attesi 5 byte. Questo è così che l'int verrà parola allineato. Generalmente align tutto a 4 byte e, probabilmente, utilizzare l'attributo imballato gcc (struct my_packed_struct __attribute__ ((__packed__))
) pure. Questo farà sì che la struttura interna di struct sono come ci si aspetta.
In alternativa, utilizzare il simulatore di Android per generare il file di dati per voi.