1 #ifndef CONVERSION_UTILITIES_BINARY_CONVERSION_H 2 #define CONVERSION_UTILITIES_BINARY_CONVERSION_H 9 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 10 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_LITTLE_ENDIAN false 11 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_BIG_ENDIAN true 12 #define CONVERSION_UTILITIES_BYTE_ORDER_BIG_ENDIAN 13 #elif __BYTE_ORDER__ == __ORDER_PDP_ENDIAN__ 14 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_LITTLE_ENDIAN false 15 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_BIG_ENDIAN false 16 #define CONVERSION_UTILITIES_BYTE_ORDER_MIDDLE_ENDIAN 17 #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 18 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_LITTLE_ENDIAN true 19 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_BIG_ENDIAN false 20 #define CONVERSION_UTILITIES_BYTE_ORDER_LITTLE_ENDIAN 23 #ifdef __FLOAT_WORD_ORDER__ 24 #if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__ 25 #define CONVERSION_UTILITIES_FLOAT_BYTE_ORDER_BIG_ENDIAN 26 #elif __FLOAT_WORD_ORDER__ == __ORDER_PDP_ENDIAN__ 27 #define CONVERSION_UTILITIES_FLOAT_BYTE_ORDER_MIDDLE_ENDIAN 28 #elif __FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__ 29 #define CONVERSION_UTILITIES_FLOAT_BYTE_ORDER_LITTLE_ENDIAN 32 #if defined(__BYTE_ORDER__) && defined(__FLOAT_WORD_ORDER__) 34 #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64) \ 35 || defined(__LITTLE_ENDIAN__) || defined(_little_endian__) || defined(_LITTLE_ENDIAN) || defined(_WIN32_WCE) || defined(WINAPI_FAMILY) 36 #ifndef __BYTE_ORDER__ 37 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_LITTLE_ENDIAN true 38 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_BIG_ENDIAN false 39 #define CONVERSION_UTILITIES_BYTE_ORDER_LITTLE_ENDIAN 41 #ifndef __FLOAT_WORD_ORDER__ 42 #define CONVERSION_UTILITIES_FLOAT_BYTE_ORDER_LITTLE_ENDIAN 44 #elif defined(__MIPSEB__) || defined(__s390__) || defined(__BIG_ENDIAN__) || defined(_big_endian__) || defined(_BIG_ENDIAN) 45 #ifndef __BYTE_ORDER__ 46 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_LITTLE_ENDIAN false 47 #define CONVERSION_UTILITIES_IS_BYTE_ORDER_BIG_ENDIAN true 48 #define CONVERSION_UTILITIES_BYTE_ORDER_BIG_ENDIAN 50 #ifndef __FLOAT_WORD_ORDER__ 51 #define CONVERSION_UTILITIES_FLOAT_BYTE_ORDER_BIG_ENDIAN 54 #error "Unable to determine byte order!" 58 #if defined(CONVERSION_UTILITIES_BYTE_ORDER_MIDDLE_ENDIAN) 59 #error "Middle endian byte order is not supported!" 61 #if defined(CONVERSION_UTILITIES_FLOAT_BYTE_ORDER_MIDDLE_ENDIAN) 62 #error "Middle endian byte order is not supported!" 73 #if defined(CONVERSION_UTILITIES_BYTE_ORDER_LITTLE_ENDIAN) 74 #define CONVERSION_UTILITIES_BINARY_CONVERSION_INTERNAL 0 75 #elif defined(CONVERSION_UTILITIES_BYTE_ORDER_BIG_ENDIAN) 76 #define CONVERSION_UTILITIES_BINARY_CONVERSION_INTERNAL 1 79 #undef CONVERSION_UTILITIES_BINARY_CONVERSION_INTERNAL 88 #if defined(CONVERSION_UTILITIES_BYTE_ORDER_LITTLE_ENDIAN) 89 #define CONVERSION_UTILITIES_BINARY_CONVERSION_INTERNAL 1 90 #elif defined(CONVERSION_UTILITIES_BYTE_ORDER_BIG_ENDIAN) 91 #define CONVERSION_UTILITIES_BINARY_CONVERSION_INTERNAL 0 94 #undef CONVERSION_UTILITIES_BINARY_CONVERSION_INTERNAL 102 return static_cast<uint16>(float32value * 256.0f);
110 return static_cast<float32
>(fixed8value) / 256.0f;
118 return static_cast<uint32>(float32value * 65536.0f);
126 return static_cast<float32
>(fixed16value) / 65536.0f;
136 return ((normalInt & 0x0000007fu)) | ((normalInt & 0x00003f80u) << 1) | ((normalInt & 0x001fc000u) << 2) | ((normalInt & 0x0fe00000u) << 3);
146 return ((synchsafeInt & 0x0000007fu)) | ((synchsafeInt & 0x00007f00u) >> 1) | ((synchsafeInt & 0x007f0000u) >> 2)
147 | ((synchsafeInt & 0x7f000000u) >> 3);
155 return ((value >> 8) & 0x00FF) | ((value << 8) & 0xFF00);
163 return (value >> 24) | ((value & 0x00FF0000) >> 8) | ((value & 0x0000FF00) << 8) | (value << 24);
171 return (value >> (7 * 8)) | ((value & 0x00FF000000000000) >> (5 * 8)) | ((value & 0x0000FF0000000000) >> (3 * 8))
172 | ((value & 0x000000FF00000000) >> (1 * 8)) | ((value & 0x00000000FF000000) << (1 * 8)) | ((value & 0x0000000000FF0000) << (3 * 8))
173 | ((value & 0x000000000000FF00) << (5 * 8)) | ((value) << (7 * 8));
177 #endif // CONVERSION_UTILITIES_BINARY_CONVERSION_H
CPP_UTILITIES_EXPORT constexpr uint16 toFixed8(float32 float32value)
Returns the 8.8 fixed point representation converted from the specified 32-bit floating point number...
std::uint64_t uint64
unsigned 64-bit integer
CPP_UTILITIES_EXPORT constexpr uint16 swapOrder(uint16 value)
Swaps the byte order of the specified 16-bit unsigned integer.
Contains several functions providing conversions between different data types.
std::uint32_t uint32
unsigned 32-bit integer
CPP_UTILITIES_EXPORT constexpr uint32 toSynchsafeInt(uint32 normalInt)
Returns a 32-bit synchsafe integer converted from a normal 32-bit integer.
CPP_UTILITIES_EXPORT constexpr float32 toFloat32(uint16 fixed8value)
Returns a 32-bit floating point number converted from the specified 8.8 fixed point representation...
CPP_UTILITIES_EXPORT constexpr uint32 toNormalInt(uint32 synchsafeInt)
Returns a normal 32-bit integer converted from a 32-bit synchsafe integer.
CPP_UTILITIES_EXPORT constexpr uint32 toFixed16(float32 float32value)
Returns the 16.16 fixed point representation converted from the specified 32-bit floating point numbe...
#define CPP_UTILITIES_EXPORT
Marks the symbol to be exported by the c++utilities library.
std::uint16_t uint16
unsigned 16-bit integer