Skip to content

Instantly share code, notes, and snippets.

@PkmX
Forked from panzi/portable_endian.h
Last active October 12, 2022 16:05

Revisions

  1. PkmX revised this gist Jun 9, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion portable_endian.h
    Original file line number Diff line number Diff line change
    @@ -65,7 +65,7 @@
    # if BYTE_ORDER == LITTLE_ENDIAN

    # if defined(_MSC_VER)
    # include <cstdlib>
    # include <stdlib.h>
    # define htobe16(x) _byteswap_ushort(x)
    # define htole16(x) (x)
    # define be16toh(x) _byteswap_ushort(x)
  2. PkmX revised this gist Jun 9, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion portable_endian.h
    Original file line number Diff line number Diff line change
    @@ -60,7 +60,7 @@

    #elif defined(__WINDOWS__)

    # include <sys/param.h>
    # include <windows.h>

    # if BYTE_ORDER == LITTLE_ENDIAN

  3. PkmX revised this gist Jun 9, 2015. 1 changed file with 38 additions and 35 deletions.
    73 changes: 38 additions & 35 deletions portable_endian.h
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    // "License": Public Domain
    // I, Mathias Panzenböck, place this file hereby into the public domain. Use it at your own risk for whatever you like.
    // I, Mathias Panzenb�ck, place this file hereby into the public domain. Use it at your own risk for whatever you like.
    // In case there are jurisdictions that don't support putting things in the public domain you can also consider it to
    // be "dual licensed" under the BSD, MIT and Apache licenses, if you want to. This code is trivial anyway. Consider it
    // an example on how to get the endian conversion functions on different platforms.
    @@ -60,43 +60,46 @@

    #elif defined(__WINDOWS__)

    # include <winsock2.h>
    # include <sys/param.h>

    # if BYTE_ORDER == LITTLE_ENDIAN

    # define htobe16(x) htons(x)
    # define htole16(x) (x)
    # define be16toh(x) ntohs(x)
    # define le16toh(x) (x)

    # define htobe32(x) htonl(x)
    # define htole32(x) (x)
    # define be32toh(x) ntohl(x)
    # define le32toh(x) (x)

    # define htobe64(x) htonll(x)
    # define htole64(x) (x)
    # define be64toh(x) ntohll(x)
    # define le64toh(x) (x)

    # elif BYTE_ORDER == BIG_ENDIAN

    /* that would be xbox 360 */
    # define htobe16(x) (x)
    # define htole16(x) __builtin_bswap16(x)
    # define be16toh(x) (x)
    # define le16toh(x) __builtin_bswap16(x)

    # define htobe32(x) (x)
    # define htole32(x) __builtin_bswap32(x)
    # define be32toh(x) (x)
    # define le32toh(x) __builtin_bswap32(x)

    # define htobe64(x) (x)
    # define htole64(x) __builtin_bswap64(x)
    # define be64toh(x) (x)
    # define le64toh(x) __builtin_bswap64(x)
    # if defined(_MSC_VER)
    # include <cstdlib>
    # define htobe16(x) _byteswap_ushort(x)
    # define htole16(x) (x)
    # define be16toh(x) _byteswap_ushort(x)
    # define le16toh(x) (x)

    # define htobe32(x) _byteswap_ulong(x)
    # define htole32(x) (x)
    # define be32toh(x) _byteswap_ulong(x)
    # define le32toh(x) (x)

    # define htobe64(x) _byteswap_uint64(x)
    # define htole64(x) (x)
    # define be64toh(x) _byteswap_uint64(x)
    # define le64toh(x) (x)

    # elif defined(__GNUC__) || defined(__clang__)

    # define htobe16(x) __builtin_bswap16(x)
    # define htole16(x) (x)
    # define be16toh(x) __builtin_bswap16(x)
    # define le16toh(x) (x)

    # define htobe32(x) __builtin_bswap32(x)
    # define htole32(x) (x)
    # define be32toh(x) __builtin_bswap32(x)
    # define le32toh(x) (x)

    # define htobe64(x) __builtin_bswap64(x)
    # define htole64(x) (x)
    # define be64toh(x) __builtin_bswap64(x)
    # define le64toh(x) (x)
    # else
    # error platform not supported
    # endif

    # else

    @@ -115,4 +118,4 @@

    #endif

    #endif
    #endif
  4. @panzi panzi revised this gist Apr 15, 2015. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions portable_endian.h
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,8 @@
    // "License": Public Domain
    // I, Mathias Panzenböck, place this file hereby into the public domain. Use it at your own risk for whatever you like.
    // In case there are jurisdictions that don't support putting things in the public domain you can also consider it to
    // be "dual licensed" under the BSD, MIT and Apache licenses, if you want to. This code is trivial anyway. Consider it
    // an example on how to get the endian conversion functions on different platforms.

    #ifndef PORTABLE_ENDIAN_H__
    #define PORTABLE_ENDIAN_H__
  5. @panzi panzi revised this gist Jun 11, 2014. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions portable_endian.h
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,6 @@
    // "License": Public Domain
    // I, Mathias Panzenböck, place this file hereby into the public domain. Use it at your own risk for whatever you like.

    #ifndef PORTABLE_ENDIAN_H__
    #define PORTABLE_ENDIAN_H__

  6. @panzi panzi revised this gist Apr 28, 2014. 1 changed file with 24 additions and 24 deletions.
    48 changes: 24 additions & 24 deletions portable_endian.h
    Original file line number Diff line number Diff line change
    @@ -15,20 +15,20 @@

    # include <libkern/OSByteOrder.h>

    # define htobe16 OSSwapHostToBigInt16
    # define htole16 OSSwapHostToLittleInt16
    # define be16toh OSSwapBigToHostInt16
    # define le16toh OSSwapLittleToHostInt16
    # define htobe16(x) OSSwapHostToBigInt16(x)
    # define htole16(x) OSSwapHostToLittleInt16(x)
    # define be16toh(x) OSSwapBigToHostInt16(x)
    # define le16toh(x) OSSwapLittleToHostInt16(x)

    # define htobe32 OSSwapHostToBigInt32
    # define htole32 OSSwapHostToLittleInt32
    # define be32toh OSSwapBigToHostInt32
    # define le32toh OSSwapLittleToHostInt32
    # define htobe32(x) OSSwapHostToBigInt32(x)
    # define htole32(x) OSSwapHostToLittleInt32(x)
    # define be32toh(x) OSSwapBigToHostInt32(x)
    # define le32toh(x) OSSwapLittleToHostInt32(x)

    # define htobe64 OSSwapHostToBigInt64
    # define htole64 OSSwapHostToLittleInt64
    # define be64toh OSSwapBigToHostInt64
    # define le64toh OSSwapLittleToHostInt64
    # define htobe64(x) OSSwapHostToBigInt64(x)
    # define htole64(x) OSSwapHostToLittleInt64(x)
    # define be64toh(x) OSSwapBigToHostInt64(x)
    # define le64toh(x) OSSwapLittleToHostInt64(x)

    # define __BYTE_ORDER BYTE_ORDER
    # define __BIG_ENDIAN BIG_ENDIAN
    @@ -43,14 +43,14 @@

    # include <sys/endian.h>

    # define be16toh betoh16
    # define le16toh letoh16
    # define be16toh(x) betoh16(x)
    # define le16toh(x) letoh16(x)

    # define be32toh betoh32
    # define le32toh letoh32
    # define be32toh(x) betoh32(x)
    # define le32toh(x) letoh32(x)

    # define be64toh betoh64
    # define le64toh letoh64
    # define be64toh(x) betoh64(x)
    # define le64toh(x) letoh64(x)

    #elif defined(__WINDOWS__)

    @@ -59,19 +59,19 @@

    # if BYTE_ORDER == LITTLE_ENDIAN

    # define htobe16 htons
    # define htobe16(x) htons(x)
    # define htole16(x) (x)
    # define be16toh ntohs
    # define be16toh(x) ntohs(x)
    # define le16toh(x) (x)

    # define htobe32 htonl
    # define htobe32(x) htonl(x)
    # define htole32(x) (x)
    # define be32toh ntohl
    # define be32toh(x) ntohl(x)
    # define le32toh(x) (x)

    # define htobe64 htonll
    # define htobe64(x) htonll(x)
    # define htole64(x) (x)
    # define be64toh ntohll
    # define be64toh(x) ntohll(x)
    # define le64toh(x) (x)

    # elif BYTE_ORDER == BIG_ENDIAN
  7. @panzi panzi created this gist Oct 6, 2013.
    112 changes: 112 additions & 0 deletions portable_endian.h
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,112 @@
    #ifndef PORTABLE_ENDIAN_H__
    #define PORTABLE_ENDIAN_H__

    #if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__)

    # define __WINDOWS__

    #endif

    #if defined(__linux__) || defined(__CYGWIN__)

    # include <endian.h>

    #elif defined(__APPLE__)

    # include <libkern/OSByteOrder.h>

    # define htobe16 OSSwapHostToBigInt16
    # define htole16 OSSwapHostToLittleInt16
    # define be16toh OSSwapBigToHostInt16
    # define le16toh OSSwapLittleToHostInt16

    # define htobe32 OSSwapHostToBigInt32
    # define htole32 OSSwapHostToLittleInt32
    # define be32toh OSSwapBigToHostInt32
    # define le32toh OSSwapLittleToHostInt32

    # define htobe64 OSSwapHostToBigInt64
    # define htole64 OSSwapHostToLittleInt64
    # define be64toh OSSwapBigToHostInt64
    # define le64toh OSSwapLittleToHostInt64

    # define __BYTE_ORDER BYTE_ORDER
    # define __BIG_ENDIAN BIG_ENDIAN
    # define __LITTLE_ENDIAN LITTLE_ENDIAN
    # define __PDP_ENDIAN PDP_ENDIAN

    #elif defined(__OpenBSD__)

    # include <sys/endian.h>

    #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)

    # include <sys/endian.h>

    # define be16toh betoh16
    # define le16toh letoh16

    # define be32toh betoh32
    # define le32toh letoh32

    # define be64toh betoh64
    # define le64toh letoh64

    #elif defined(__WINDOWS__)

    # include <winsock2.h>
    # include <sys/param.h>

    # if BYTE_ORDER == LITTLE_ENDIAN

    # define htobe16 htons
    # define htole16(x) (x)
    # define be16toh ntohs
    # define le16toh(x) (x)

    # define htobe32 htonl
    # define htole32(x) (x)
    # define be32toh ntohl
    # define le32toh(x) (x)

    # define htobe64 htonll
    # define htole64(x) (x)
    # define be64toh ntohll
    # define le64toh(x) (x)

    # elif BYTE_ORDER == BIG_ENDIAN

    /* that would be xbox 360 */
    # define htobe16(x) (x)
    # define htole16(x) __builtin_bswap16(x)
    # define be16toh(x) (x)
    # define le16toh(x) __builtin_bswap16(x)

    # define htobe32(x) (x)
    # define htole32(x) __builtin_bswap32(x)
    # define be32toh(x) (x)
    # define le32toh(x) __builtin_bswap32(x)

    # define htobe64(x) (x)
    # define htole64(x) __builtin_bswap64(x)
    # define be64toh(x) (x)
    # define le64toh(x) __builtin_bswap64(x)

    # else

    # error byte order not supported

    # endif

    # define __BYTE_ORDER BYTE_ORDER
    # define __BIG_ENDIAN BIG_ENDIAN
    # define __LITTLE_ENDIAN LITTLE_ENDIAN
    # define __PDP_ENDIAN PDP_ENDIAN

    #else

    # error platform not supported

    #endif

    #endif