diff --git a/include/seqan3/io/detail/magic_header.hpp b/include/seqan3/io/detail/magic_header.hpp index 9a629af0f9c..21b60122595 100644 --- a/include/seqan3/io/detail/magic_header.hpp +++ b/include/seqan3/io/detail/magic_header.hpp @@ -13,6 +13,7 @@ #pragma once #include +#include #include #include #include @@ -20,7 +21,6 @@ #include #include -#include #include namespace seqan3::detail @@ -100,14 +100,16 @@ struct bgzf_compression static_assert(std::equality_comparable_with, "The given char type of the span must be comparable with char."); - return (header[0] == magic_header[0] && // GZ_ID1 - header[1] == magic_header[1] && // GZ_ID2 - header[2] == magic_header[2] && // GZ_CM - (header[3] & magic_header[3]) != 0 && // FLG_FEXTRA - to_little_endian(*reinterpret_cast(&header[10])) == magic_header[10] && // BGZF_ID1 - header[12] == magic_header[12] && // BGZF_ID2 - header[13] == magic_header[13] && // BGZF_SLEN - to_little_endian(*reinterpret_cast(&header[14])) == magic_header[14]); // BGZF_XLEN + static constexpr auto id1_pos = std::endian::native == std::endian::little ? 10 : 11; + + return (header[0] == magic_header[0] && // GZ_ID1 + header[1] == magic_header[1] && // GZ_ID2 + header[2] == magic_header[2] && // GZ_CM + (header[3] & magic_header[3]) != 0 && // FLG_FEXTRA + header[id1_pos] == magic_header[10] && // BGZF_ID1 + header[12] == magic_header[12] && // BGZF_ID2 + header[13] == magic_header[13] && // BGZF_SLEN + header[id1_pos + 4] == magic_header[14]); // BGZF_XLEN } };