Il s'agit de lire 4 octets dans un QByteArray, dans lequel j'ai copié tout un fichier. Les 4 octets représentent une taille, et je n'ai aucune certitude quant à un quelconque alignement.
Evidemment, je peux lire les 4 octets à la main ^^
Je trouve quand même risqué d'écrire du code qui ne fonctionne pas (pire, qui semble fonctionner, mais qui peut foirer sans prévenir) avec les options par défaut des compilateurs. C'est le genre de trucs qui revient te hanter tôt ou tard.

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT TurboZero: l'utilisation des hton* ntoh* resouds ce probleme de maniere plutot formidable!

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
Pas vraiment. Ça ne fait que changer l'ordre des octets (donc ça suppose que tu fasses un accès aliasé et potentiellement non aligné). Et ça ne supporte que le big-endian.

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT TurboA vrai dire il vaux mieux, si on map un fichier en mémoire, utiliser une structuré avec un pack a 1 et pointer la structure sur la zone mémoire.
Et si c'est portable, c'est justement tout l'intérêt du compilateur, quand on passe par ce genre de méthode, plutôt que de jouer avec des pointeurs direct. Le compilateur va faire attention a ce que le code ne fasse pas d'acces non alligné si on est sur une archi qui ne peux pas lire des données non allignée.
Apres pour un probleme de performances c'est un autre sujet, mais si le fichier met des valeurs a des addresses non alignée, tu n'a pas forcement le choix.
A vrai dire, faire une fonction qui va swaper les octets n'est pas forcement des plus pratique, l'avantage d'un fichier mappé en mémoire c'est qu'on peux y acceder en direct, sinon autant lire a coup de (f)read avec la taille dont on a besoin..
Folco: d'ailleurs, a moins d'utiliser Windows (et encore il y a moyen de faire) je te conseilllerais plutot de passer par du mmap, plutot qu'un truc genre
char *buf = malloc(size_of_file)
fread(buf, 1, size_of_file, file);
mmap, contrairement a cette facon de faire te permet de ne pas avoir a gerer la mémoire car c'est l'OS qui gere le mapping mémoire du dit fichier, donc il est capable si besoin est de décharger une partie du fichier de la mémoire, et ensuite recharger.
Tres utile si tu as de tres gros fichiers a mettre en memoire (comme des fichiers qui sont plus gros que l'espace memoire disponible)

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
Effectivement, la manière portable de lire un entier 32-bits d'un char * est:
char *p;
// variables intermédiaires parce qu'on ne peut pas utiliser plusieurs postincrements dans une même instruction
unsigned char c1 = (unsigned char) *(p++);
unsigned char c2 = (unsigned char) *(p++);
unsigned char c3 = (unsigned char) *(p++);
unsigned char c4 = (unsigned char) *(p++);
// au choix:
uint32_t iBE = ((uint32_t) c1 << 24u) + ((uint32_t) c2 << 16u) + ((uint32_t) c3 << 8u) + (uint32_t) c4;
uint32_t iLE = (uint32_t) c1 + ((uint32_t) c2 << 8u) + ((uint32_t) c3 << 16u) + ((uint32_t) c4 << 24u);
Vous vous compliquez, utilisez un truc comme protobuff ou flatbuffer pour sérialiser votre structure sur disque/réseau/whatever avec packing, et pareil pour la relire, elle sera mise en mémoire au bon format. Mais ça impose de la décrire d'une façon ou d'une autre (en général json converti en code généré). La formule magique dans ce domaine n'a toujours pas été trouvée.

ROM ne s'est pas compilé en un jour
On a pas forcément envie de rajouter une dépendance externe pour un petit projet, et les fonctions de lecture/écriture sont relativement simples à écrire.

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turbo Zeph Le 05/11/2017 à 21:56 Ah OK, j'avais mal compris l'argument, je pensais qu'ils proposaient de remplacer une multiplication par le décalage équivalent. Ceci dit du coup c'est à toi qui je pose la question également : pourquoi est-ce "plus élégant" (et ça veut dire quoi d'ailleurs) ?

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
(plus parlant, puisqu'il s'agit de positionner des octets)

ROM ne s'est pas compilé en un jour
Il y a aussi une question d'intention.
Autant remplacer un *2 par un <<1 peux rendre le code moins lisible, autant la ce que Folco veux faire est clairement décaler des bits vers la gauche et ensuite faire un OR avec les dites valeurs. En gros il ne fait pas des maths mais de la manipulation de bits.
Autant 256, 65536 & co sont des valeurs simples et connue d'une majorité, mais
x * 512 tu pense immédiatement a un décalage de 9 bits vers la gauche?
La il ne fait pas des maths, et ne cherche pas a "optimiser" du code, c'est juste qu'il est plus logique d'utiliser un shift qu'une multiplication.

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
En même temps, quand on émet des affirmations à l'emporte-pièce sur des choses que l'on ne connaît pas, à de nombreuses reprises et malgré les explications des autres personnes, faut pas s'étonner que ça finisse par agacer un peu les gens.

—
Zeroblog —
« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » —
Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » —
GT Turbo Pen^2 Le 06/11/2017 à 00:24 Sans doute, mais, je préfère nettement l'histoire des lunettes.