我正在尝试从一个tiff图像文件中获取信息。Endian的输出是正确的,但其他的都是错误的。tiff文件的前8个字节为:
4d 4d 00 2a 00 02 03 60
我收到的magicno是10752,也就是十六进制中的2A00。但我应该读取第三和第四个字节,这应该是002a。请帮帮我!以下是我的代码:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char buffer[3];
short magicno;
int ifdaddress;
short ifdcount;
ifstream imfile;
imfile.open("pooh.tif",ios::binary);
imfile.seekg(0,ios::beg);
imfile.read(buffer,2);
imfile.read((char*)&magicno, 2);
imfile.read((char*)&ifdaddress, 4);
imfile.seekg(ifdaddress, ios::beg);
imfile.read((char*)&ifdcount, 2);
imfile.close();
buffer[2]='\0';
cout<<"Endian: "<<buffer<<endl;
cout<<"Magic: "<<magicno<<endl;
cout<<"IFD Address: "<<ifdaddress<<endl;
cout<<"IFD CountL "<<ifdcount<<endl;
return 0;
}
我的输出结果是:
Endian: MM
Magic: 10752
IFD Address: 1610809856
IFD CountL 0
10
一样。你正在读取字节,它们的值可以从0到255,并且可以被解释为-128到+127,或者作为ASCII字符。这些字节本身并不是“十六进制”或“十进制”的。 - Jongwarea
、b
、c
和d
都是无符号的。如果你还遇到问题,请像这个问题一样发布一个新的问题并附上你的结果。 - Jongware