библиотека C++ для осведомленного о порядке байтов чтения необработанных потоковых метаданных файла?

У меня есть потоки необработанных данных от файлов изображений, как:

vector<char> rawData(fileSize);
ifstream inFile("image.jpg");
inFile.read(&rawData[0]);

Я хочу проанализировать заголовки различных форматов изображения для высоты и ширины. Существует ли портативная библиотека, что банка может считать ints, longs, короткие замыкания, и т.д. от буфера/потока, преобразовывающего для порядка байтов, как указано?

Я хотел бы смочь сделать что-то как: short x = rawData.readLeShort(offset); или long y = rawData.readBeLong(offset)

Ровным более оптимальным вариантом была бы легкая и портативная библиотека метаданных изображения (без дополнительного веса библиотеки обработки изображения), который может работать над необработанными данными изображения. Я нашел, что библиотеки Exif там не поддерживают png и gif.

6
задан Kache 20 March 2010 в 20:18
поделиться

1 ответ

Это не так уж и сложно сделать самому. Вот как вы можете прочитать 32-битное число с прямым порядком байтов:

unsigned char buffer[4];
inFile.read(buffer, sizeof(buffer));

unsigned int number = buffer[0] +
                      (buffer[1] << 8) +
                      (buffer[2] << 16) +
                      (buffer[3] << 24);

и прочитать 32-битное число с прямым порядком байтов:

unsigned char buffer[4];
inFile.read(buffer, sizeof(buffer));

unsigned int number = buffer[3] +
                      (buffer[2] << 8) +
                      (buffer[1] << 16) +
                      (buffer[0] << 24);
0
ответ дан 18 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: