C Standard ?

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 2 mai 2006 à 13:05
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 2 mai 2006 à 14:40
Bonjour à tous,

Je suis tombé récemmnt sur un truc bizarre :

Dans un code source compilé avec Borland C++ 4.5, il y avait des trucs du genre :
#define SIGNATURE 'BM'

qui étaient utilisés lors de l'écriture dans des fichiers pour pouvoir "signer" le contenu
WORD wSig = SIGNATURE;
WriteFile(hf, &wSig, sizeof(WORD), &dwBytesWritten, NULL);

Ca marche nickel, les fichiers générés était relus et les signatures trouvées.

En compilant le même source avec Visual C++ 2003, les WORD contenant les signatures ne peuvent plus
être comparé avec #define SIGNATURE 'BM', il a fallu faire :
#define SIGNATURE 'MB'
les 2 octets sont inversés entre les 2 compilos

N'ayant plus sous la main Borland, je peux pas checker le pb. Ja'i juste les fichiers générés par l'ancienne version.

D'où ma question :
- Est-ce que la notation 'BM' est standard (c'est censé prendre les 2 chars et les mettre sur 16 bits, mais l'ordre est-il standard ?)

Merci et bonne prog à tous

1 réponse

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 mai 2006 à 14:40
Je ne sais pas pour Borland mais VC++ place les octets en respectant l'ordre de l'architecture x86 Intel (little endian) où le 1er est celui de droite.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous