通过将数据块读入内存并使用下面显示的函数交换大端整数,我设法解析了一个大型二进制文件(~8Gb)。但是,我试图通过使用Boost Memory-Mapped 文件来获得更多性能,但我无法使用 endian_swap 函数,因为该文件是以只读模式打开的。有没有什么有效的方法可以在不写入原始文件的情况下交换字节?如果不是,性能会受到 I/O 开销的影响吗?
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));
}
代码在这篇文章中找到。非常感谢您的宝贵时间