Jac*_*ack 3 c height jpeg width
我把这个函数写成给定的文件名(一个jpeg文件)应该以像素为单位打印它的大小,w和h.根据我正在阅读的教程,
// 0xFFC0是"帧起始"标记,包含文件大小// 0xFFC0块的结构非常简单[0xFFC0] [ushort length] [uchar precision] [ushort x] [ushort y]
所以,我写了这个 struct
#pragma pack(1)
struct imagesize {
  unsigned short len; /* 2-bytes */
  unsigned char c;    /* 1-byte */
  unsigned short x;   /* 2-bytes */
  unsigned short y;   /* 2-bytes */
}; //sizeof(struct imagesize) == 7
#pragma pack()
然后:
#define SOF 0xC0 /* start of frame */
    void jpeg_test(const char *filename)
    {
      FILE *fh;
      unsigned char buf[4];
      unsigned char b;
      fh = fopen(filename, "rb");
      if(fh == NULL) 
        fprintf(stderr, "cannot open '%s' file\n", filename);
      while(!feof(fh)) {
        b = fgetc(fh);
        if(b == SOF) {
          struct imagesize img;
    #if 1
          ungetc(b, fh);
          fread(&img, 1, sizeof(struct imagesize), fh);
    #else
          fread(buf, 1, sizeof(buf), fh);
          int w = (buf[0] << 8) + buf[1];
          int h = (buf[2] << 8) + buf[3];
          img.x = w;
          img.y = h;
    #endif
          printf("%dx%d\n",
             img.x,
             img.y);
          break;
        }
      }
      fclose(fh);
    }
但我得到的520x537不是700x537,那是真正的大小.
有人能指出并解释我错在哪里吗?