48 lines
1.0 KiB
C
48 lines
1.0 KiB
C
|
/* endian.h: Functions to convert between different byte orderings. */
|
||
|
|
||
|
#ifndef _ENDIAN_H
|
||
|
#define _ENDIAN_H
|
||
|
|
||
|
#include <stdint.h>
|
||
|
|
||
|
#define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
|
||
|
#define BIG_ENDIAN __ORDER_BIG_ENDIAN__
|
||
|
|
||
|
#define BYTE_ORDER __BYTE_ORDER__
|
||
|
|
||
|
#if BYTE_ORDER == LITTLE_ENDIAN
|
||
|
#define be16toh(x) __builtin_bswap16(x)
|
||
|
#define be32toh(x) __builtin_bswap32(x)
|
||
|
#define be64toh(x) __builtin_bswap64(x)
|
||
|
|
||
|
#define htobe16(x) __builtin_bswap16(x)
|
||
|
#define htobe32(x) __builtin_bswap32(x)
|
||
|
#define htobe64(x) __builtin_bswap64(x)
|
||
|
|
||
|
#define htole16(x) (x)
|
||
|
#define htole32(x) (x)
|
||
|
#define htole64(x) (x)
|
||
|
|
||
|
#define le16toh(x) (x)
|
||
|
#define le32toh(x) (x)
|
||
|
#define le64toh(x) (x)
|
||
|
#else
|
||
|
#define be16toh(x) (x)
|
||
|
#define be32toh(x) (x)
|
||
|
#define be64toh(x) (x)
|
||
|
|
||
|
#define htobe16(x) (x)
|
||
|
#define htobe32(x) (x)
|
||
|
#define htobe64(x) (x)
|
||
|
|
||
|
#define htole16(x) __builtin_bswap16(x)
|
||
|
#define htole32(x) __builtin_bswap32(x)
|
||
|
#define htole64(x) __builtin_bswap64(x)
|
||
|
|
||
|
#define le16toh(x) __builtin_bswap16(x)
|
||
|
#define le32toh(x) __builtin_bswap32(x)
|
||
|
#define le64toh(x) __builtin_bswap64(x)
|
||
|
#endif
|
||
|
|
||
|
#endif
|