- /** Function to reverse the byte ordering of the individual bytes in a 16 bit number.
- *
- * \ingroup Group_BitManip
- *
- * \param[in] Word Word of data whose bytes are to be swapped.
- */
- static inline uint16_t SwapEndian_16(const uint16_t Word) ATTR_WARN_UNUSED_RESULT ATTR_CONST;
- static inline uint16_t SwapEndian_16(const uint16_t Word)
- {
- uint8_t Temp;
-
- union
- {
- uint16_t Word;
- uint8_t Bytes[2];
- } Data;
-
- Data.Word = Word;
-
- Temp = Data.Bytes[0];
- Data.Bytes[0] = Data.Bytes[1];
- Data.Bytes[1] = Temp;
-
- return Data.Word;
- }
-
- /** Function to reverse the byte ordering of the individual bytes in a 32 bit number.
- *
- * \ingroup Group_BitManip
- *
- * \param[in] DWord Double word of data whose bytes are to be swapped.
- */
- static inline uint32_t SwapEndian_32(const uint32_t DWord) ATTR_WARN_UNUSED_RESULT ATTR_CONST;
- static inline uint32_t SwapEndian_32(const uint32_t DWord)
- {
- uint8_t Temp;
-
- union
- {
- uint32_t DWord;
- uint8_t Bytes[4];
- } Data;
-
- Data.DWord = DWord;
-
- Temp = Data.Bytes[0];
- Data.Bytes[0] = Data.Bytes[3];
- Data.Bytes[3] = Temp;
-
- Temp = Data.Bytes[1];
- Data.Bytes[1] = Data.Bytes[2];
- Data.Bytes[2] = Temp;
-
- return Data.DWord;
- }
-
- /** Function to reverse the byte ordering of the individual bytes in a n byte number.
- *
- * \ingroup Group_BitManip
- *
- * \param[in,out] Data Pointer to a number containing an even number of bytes to be reversed.
- * \param[in] Bytes Length of the data in bytes.
- */
- static inline void SwapEndian_n(void* Data,
- uint8_t Bytes) ATTR_NON_NULL_PTR_ARG(1);
- static inline void SwapEndian_n(void* Data,
- uint8_t Bytes)
- {
- uint8_t* CurrDataPos = (uint8_t*)Data;
-
- while (Bytes > 1)
- {
- uint8_t Temp = *CurrDataPos;
- *CurrDataPos = *(CurrDataPos + Bytes - 1);
- *(CurrDataPos + Bytes - 1) = Temp;
-
- CurrDataPos++;
- Bytes -= 2;
- }
- }
-