La représentation binaire des types natifs de la même garantie sur toutes les cibles?
-
26-09-2019 - |
Question
I "m planification pour stocker mes données dans un format binaire comme une ressource, lire dans un tampon int et fondamentalement passer directement vers le bas à une fonction C ++ natif, ce qui pourrait jeter un struct / classe et travailler avec elle . Pas de pointeurs, évidemment, seulement ints et chars.
La question est - quel type de fixation jusqu'à ce que je dois faire? Je suppose que je dois vérifier ByteOrder.nativeOrder()
, savoir s'il est grand endian ou little endian, et intervertir les octets le cas échéant.
Autre que, flotteurs sont vraisemblablement garantis à prévoir au format IEEE 754? Y at-il d'autres mises en garde, je suis complètement donnant ici?
(également - puisque je compiler en utilisant le NDK, je sais ce que l'architecture est déjà (ARMv7-A, dans mon cas), donc je peux sauter techniquement les manigances endian et juste prendre les données comme il est? )
La solution
Prise en charge ARM grands et petit-boutiste. Ce sera très probablement être réglé par le système d'exploitation de sorte qu'il pourrait être utile de vérifier ceci au préalable.
Il y a aussi la question de rembourrage à la taille de mot dans un struct:
struct st
{
char a;
int b;
};
aura un sizeof
8 et non attendus 5 octets. Il en est ainsi que l'int sera aligné mot. En général, tout à aligner 4 octets et probablement utiliser aussi bien l'attribut gcc calfeutrée (struct my_packed_struct __attribute__ ((__packed__))
). Cela permettra d'assurer que les entrailles de la struct sont comme prévu.
Vous pouvez également utiliser le simulateur Android pour générer le fichier de données pour vous.