1#pragma once 2 3#include <features.h> 4 5#define __LITTLE_ENDIAN 1234 6#define __BIG_ENDIAN 4321 7#define __PDP_ENDIAN 3412 8 9#if defined(__GNUC__) && defined(__BYTE_ORDER__) 10#define __BYTE_ORDER __BYTE_ORDER__ 11#else 12#include <bits/endian.h> 13#endif 14 15#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 16 17#define BIG_ENDIAN __BIG_ENDIAN 18#define LITTLE_ENDIAN __LITTLE_ENDIAN 19#define PDP_ENDIAN __PDP_ENDIAN 20#define BYTE_ORDER __BYTE_ORDER 21 22#include <stdint.h> 23 24static __inline uint16_t __bswap16(uint16_t __x) { 25 return (uint16_t)(__x << 8 | __x >> 8); 26} 27 28static __inline uint32_t __bswap32(uint32_t __x) { 29 return (uint32_t)(__x >> 24 | ((__x >> 8) & 0xff00) | ((__x << 8) & 0xff0000) | __x << 24); 30} 31 32static __inline uint64_t __bswap64(uint64_t __x) { 33 return ((uint64_t)__bswap32((uint32_t)__x)) << 32 | (uint64_t)__bswap32((uint32_t)(__x >> 32)); 34} 35 36#if __BYTE_ORDER == __LITTLE_ENDIAN 37#define htobe16(x) __bswap16(x) 38#define be16toh(x) __bswap16(x) 39#define betoh16(x) __bswap16(x) 40#define htobe32(x) __bswap32(x) 41#define be32toh(x) __bswap32(x) 42#define betoh32(x) __bswap32(x) 43#define htobe64(x) __bswap64(x) 44#define be64toh(x) __bswap64(x) 45#define betoh64(x) __bswap64(x) 46#define htole16(x) (uint16_t)(x) 47#define le16toh(x) (uint16_t)(x) 48#define letoh16(x) (uint16_t)(x) 49#define htole32(x) (uint32_t)(x) 50#define le32toh(x) (uint32_t)(x) 51#define letoh32(x) (uint32_t)(x) 52#define htole64(x) (uint64_t)(x) 53#define le64toh(x) (uint64_t)(x) 54#define letoh64(x) (uint64_t)(x) 55#else 56#define htobe16(x) (uint16_t)(x) 57#define be16toh(x) (uint16_t)(x) 58#define betoh16(x) (uint16_t)(x) 59#define htobe32(x) (uint32_t)(x) 60#define be32toh(x) (uint32_t)(x) 61#define betoh32(x) (uint32_t)(x) 62#define htobe64(x) (uint64_t)(x) 63#define be64toh(x) (uint64_t)(x) 64#define betoh64(x) (uint64_t)(x) 65#define htole16(x) __bswap16(x) 66#define le16toh(x) __bswap16(x) 67#define letoh16(x) __bswap16(x) 68#define htole32(x) __bswap32(x) 69#define le32toh(x) __bswap32(x) 70#define letoh32(x) __bswap32(x) 71#define htole64(x) __bswap64(x) 72#define le64toh(x) __bswap64(x) 73#define letoh64(x) __bswap64(x) 74#endif 75 76#endif 77