Как считывается signature у изображения на С++?

Объясните код. Я понимаю, что он делает, в целом, но почему мы используем reverse, мне не понятно.
Код нацелен на проверку signature у изображения формата PNG.

#include "pch.h"
#include <iostream>
#include <conio.h>
#include <fstream>
#include <iomanip>
using namespace std;

const long long unsigned png_sign = 0x89504E470D0A1A0A;
const unsigned sign_size = 8;

void reverse(char* start, char* end) {
	while (start < end) {
		swap(*start++, *end--);
	}
}

bool sign_ch(ifstream& img) {
	long unsigned long our_img;
	img.read((char*)& our_img, sign_size);
	reverse((char*)& our_img, (char*)& our_img + sign_size - 1);
	if (our_img == png_sign) {
		return true;
	}
	else {
		return false;
	}
}

int main()
{
	int count_err = 0;

	ifstream in("месторасположение", ios::binary);

	bool idat_is = false;
	if (sign_ch(in)) {
		cout << "Signature is okay" << endl;
	}
	else {
		cout << "Signature is NOT okay" << endl;
		count_err = 1;
	}

.................
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что в PNG принят big-endian формат, а x86 использует little-endian.
Можно просто сигнатуру записать задом-наперёд, но будет неудобно сравнивать код со стандартом PNG.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы