16#if !qCompilerAndStdLib_constexpr_union_enter_one_use_other_Buggy
22 static constexpr EndianTester_ kMix_{0x01020304};
27 if constexpr (endian::native == endian::little) {
28 return Endian::eLittle;
30 if constexpr (endian::native == endian::big) {
33#if !qCompilerAndStdLib_constexpr_union_enter_one_use_other_Buggy
34 return (Private_::kMix_.cdat[0] == 4) ? Endian::eLittleByte :
35 (Private_::kMix_.cdat[0] == 1) ? Endian::eBigByte
37 (Private_::kMix_.cdat[0] == 2) ? Endian::eLittleWord
41#if (defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \
42 defined(__BIG_ENDIAN__) || defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || defined(_MIBSEB) || \
43 defined(__MIBSEB) || defined(__MIBSEB__)
44 return Endian::eBigByte;
46#if (defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \
47 defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || defined(_MIPSEL) || \
48 defined(__MIPSEL) || defined(__MIPSEL__) || defined(_M_IX86) || defined(_M_X64) || defined(_M_IA64) || defined(_M_ARM)
49 return Endian::eLittle;
65 Require (from == Endian::eBig or from == Endian::eLittle);
66 Require (to == Endian::eBig or to == Endian::eLittle);
70 if constexpr (
sizeof (T) == 1) {
73 if constexpr (
sizeof (T) == 2) {
75 return ((value & 0xFF) << 8) | ((value >> 8) & 0xFF);
77 if constexpr (
sizeof (T) == 4) {
79 return ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) | ((value >> 8) & 0xFF00) | ((value >> 24) & 0xFF);
#define AssertNotImplemented()
Endian
in principle complicated question of correspondence between bit and byte and word numbering,...
constexpr Endian GetEndianness()
returns native (std::endian::native) Endianness flag. Can be complicated (mixed, etc)....
constexpr T EndianConverter(T value, Endian from, Endian to)