Мне удалось проанализировать большой двоичный файл (~ 8 ГБ), прочитав блоки данных в память и поменяв местами целые числа с прямым порядком байтов, используя функции, показанные ниже. Однако я пытаюсь повысить производительность, используя Увеличьте отображение файлов в памяти, но я не могу использовать функции endian_swap, потому что файл открывается в режиме только для чтения. Есть ли эффективный способ поменять байты местами без записи исходного файла? Если нет, на производительность повлияют накладные расходы ввода-вывода?
inline void endian_swap(unsigned short int& x)
{
x = (x>>8) |
(x<<8);
}
inline void endian_swap(unsigned int& x)
{
x = (x>>24) |
((x<<8) & 0x00FF0000) |
((x>>8) & 0x0000FF00) |
(x<<24);
}
inline void endian_swap(unsigned long long int& x)
{
x = (((unsigned long long int)(x) << 56) | \
(((unsigned long long int)(x) << 40) & 0xff000000000000ULL) | \
(((unsigned long long int)(x) << 24) & 0xff0000000000ULL) | \
(((unsigned long long int)(x) << 8) & 0xff00000000ULL) | \
(((unsigned long long int)(x) >> 8) & 0xff000000ULL) | \
(((unsigned long long int)(x) >> 24) & 0xff0000ULL) | \
(((unsigned long long int)(x) >> 40) & 0xff00ULL) | \
((unsigned long long int)(x) >> 56));
}
Код был найден в этой статье. Спасибо вам большое за ваше время