EDIT: Le mauvais type de num2 a été corrigé.Coulée d'un tableau de caractères dans un entier
Bonjour,
J'ai quelques tableaux de caractères de taille connue qui contient des données entières brutes lues à partir d'un fichier binaire.
La taille de tous ces tableaux a la taille d'un nombre entier.
Je voudrais demander si l'opération suivante est sûre et précise dans TOUTES les situations normales, en supposant que l'endianness des données brutes et l'ordinateur qui exécute ce code est d'accord.
char arr1[4] = { ... };
char arr2[2] = { ... };
uint32_t num1 = *static_cast<uint32_t*>(arr1); /* OR num1 = *(uint32_t*)arr1 in C */
uint16_t num2 = *static_cast<uint16_t*>(arr2); /* OR num2 = *(uint32_t*)arr2 in C */
Merci!
Puisqu'il s'agit d'un fichier binaire, vous feriez mieux de lire les entiers bruts dans un tableau d'entiers. – chrisaycock
Ne déclarez jamais plus d'une variable à la fois. Cela peut conduire à des bugs subtils. https://www.securecoding.cert.org/confluence/display/seccode/DCL04-C.+Do+not+declare+more+than+one+variable+per+declaration –
La conversion directe de la mémoire de caractères en entier ne fonctionne que sur les processeurs avec alignement des octets, pas d'alignement des mots. Si vous utilisez uniquement/toujours un Intel x86, ce ne sera pas un problème. –