Я пытаюсь получить информацию из файла изображения tiff. Результат Endian правильный, но все остальные ошибочны. Первые 8 байт файла TIFF является:Чтение tiff изображения с C++
4d 4d 00 2a 00 02 03 60
magicno Я получаю 10752, который 2a00 является HEX. Но я должен читать третий и для байтов, который должен быть 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
Большое вам спасибо! Теперь я знаю, в чем моя проблема. У меня есть еще один вопрос. Если то, что я прочитал из файла tiff, является шестнадцатеричным, почему я печатаю десятичные числа? – user2817869
Также, пожалуйста, объясните мне строку word = d1 + (d2 << 8)? Я не совсем понимаю часть d2 << 8. Спасибо – user2817869
@ user2817869 << является одним из побитовых операторов. Вы захотите узнать о них подробно, если вы пишете такой код. Одно место для начала: http://www.cprogramming.com/tutorial/bitwise_operators.html – Ixrec