Почему C неправильно печатает мои шестнадцатеричные значения?

Итак, я немного новичок в C, и мне любопытно выяснить, почему у меня такое необычное поведение.

Я читаю файл по 16 бит за раз и просто распечатываю их следующим образом.

#include <stdio.h>

#define endian(hex) (((hex & 0x00ff) << 8) + ((hex & 0xff00) >> 8))

int main(int argc, char *argv[])
 {
  const int SIZE = 2;
  const int NMEMB = 1;
  FILE *ifp; //input file pointe
  FILE *ofp; // output file pointer

  int i;
  short hex;
  for (i = 2; i < argc; i++)
   {
    // Reads the header and stores the bits
    ifp = fopen(argv[i], "r");
    if (!ifp) return 1;
    while (fread(&hex, SIZE, NMEMB, ifp))
     {
      printf("\n%x", hex);
      printf("\n%x", endian(hex)); // this prints what I expect
      printf("\n%x", hex);
      hex = endian(hex);
      printf("\n%x", hex);
     }   
   }
 }

Результаты выглядят примерно так:

ffffdeca
cade // expected
ffffdeca
ffffcade
0
0 // expected
0
0
600
6 // expected
600
6

Кто-нибудь может объяснить мне, почему последняя строка в каждом блоке не выводит то же значение, что и вторая?

9
задан niko 9 December 2011 в 05:06
поделиться