Привет, я читаю в двоичном файле в формате hex.Это файл изображения, приведенный ниже, является кратким примером первых нескольких строк кода с использованием команды hd ... | more в linux.Изображение является бинарным изображением, поэтому цвета только в пикселях: черный или белый.Это изображение размером 1024 на 1024, однако его размер составляет 2097152 байта
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... ................ |
000dfbf0 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 ff 00 | ................ |
000dfc00 ff 00 ff 00 ff 00 00 00 00 00 00 00 00 00 00 00 | ................ |
000dfc10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |
Это код, который я использую для чтения, найденный в другом потоке на SO
ifstream file (argv[1], ios::in | ios::binary | ios::ate);
ifstream::pos_type fileSize;
char* fileContents;
if(file.is_open())
{
fileSize = file.tellg();
fileContents = new char[fileSize];
file.seekg(0, ios::beg);
if(!file.read(fileContents, fileSize))
{
cout << "fail to read" << endl;
}
file.close();
cout << fileSize << endl;
Однако код работает, когда я запускаю его для цикла
for (i=0; i<2097152; i++)
printf("%hd",fileContents[i]);
Единственное, что распечатано, это нули, а не 1.Почему это мои параметры в printf, неправильно указывающие размер пикселя.Я точно знаю, что на изображении есть 1, представляющие белые области.Также, как мне определить, сколько байтов представляет пиксель на этом изображении.