14Fermer16
KochiseLe 17/07/2009 à 19:05
Zerosquare (./12) :
Je pense que ce que tu cherches à obtenir est fondamentalement impossible à faire proprement en C...

Disons que le compilo Microsoft permet de jouer un peu : http://msdn.microsoft.com/en-us/library/83ythb65(VS.80).aspx (regarde à la fin)
Zerosquare (./12) :
(et ne parlons même pas du problème de l'endianness)

Peut être en demandant à FLC ? Naaaan, la private joke de fou, j'abuse trop là wink Disons c'est dans ce cas précis qu'on se rend finalement compte de la supériorité du little endian sur le big endian ! J'explique :

  typedef struct{
    int   nCount;
    short nMode;
    sHue  sColor;
    char* pTest; // 4 ou 8 octets suivant l'architechture
    char  aData[10];
  }sStack,*psStack;


Imagine qu'on accède donc à la struct avec un ((psStack)buff)->pTest bien senti, mais que pTest à été casté sur un __int64 (genre avec un __declspec(align(8)) ou tout autre option de compilation). Suivant l'endianesse sur une machine 32 bits (on cherche pas en 64 bits, forcément) où se situe REELEMENT le pointeur ? En little endian à pTest, en big endian à pTest+4 ! Du coup pour éviter les casting et les prises de tête inutiles, le little endian offre bien une supériorité à commencer par l'octet de poid faible se situant toujours à la même adresse...

Kochise