Skip to content

Instantly share code, notes, and snippets.

@yinyin
Created March 13, 2012 09:51
Show Gist options
  • Star 35 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save yinyin/2027912 to your computer and use it in GitHub Desktop.
Save yinyin/2027912 to your computer and use it in GitHub Desktop.
BSD/Linux-like <endian.h> for MacOS X
#ifndef __FINK_ENDIANDEV_PKG_ENDIAN_H__
#define __FINK_ENDIANDEV_PKG_ENDIAN_H__ 1
/** compatibility header for endian.h
* This is a simple compatibility shim to convert
* BSD/Linux endian macros to the Mac OS X equivalents.
* It is public domain.
* */
#ifndef __APPLE__
#warning "This header file (endian.h) is MacOS X specific.\n"
#endif /* __APPLE__ */
#include <libkern/OSByteOrder.h>
#define htobe16(x) OSSwapHostToBigInt16(x)
#define htole16(x) OSSwapHostToLittleInt16(x)
#define be16toh(x) OSSwapBigToHostInt16(x)
#define le16toh(x) OSSwapLittleToHostInt16(x)
#define htobe32(x) OSSwapHostToBigInt32(x)
#define htole32(x) OSSwapHostToLittleInt32(x)
#define be32toh(x) OSSwapBigToHostInt32(x)
#define le32toh(x) OSSwapLittleToHostInt32(x)
#define htobe64(x) OSSwapHostToBigInt64(x)
#define htole64(x) OSSwapHostToLittleInt64(x)
#define be64toh(x) OSSwapBigToHostInt64(x)
#define le64toh(x) OSSwapLittleToHostInt64(x)
#endif /* __FINK_ENDIANDEV_PKG_ENDIAN_H__ */
@SamuelMarks
Copy link

From LevelDB's port_posix.h:

#if defined(OS_MACOSX)
  #include <machine/endian.h>
#elif defined(OS_SOLARIS)
  #include <sys/isa_defs.h>
  #ifdef _LITTLE_ENDIAN
    #define LITTLE_ENDIAN
  #else
    #define BIG_ENDIAN
  #endif
#elif defined(OS_FREEBSD) || defined(OS_OPENBSD) || defined(OS_NETBSD) ||\
      defined(OS_DRAGONFLYBSD)
  #include <sys/types.h>
  #include <sys/endian.h>
#else
  #include <endian.h>
#endif

@ploxiln
Copy link

ploxiln commented Jan 12, 2015

@SamuelMarks while mac os X does have machine/endian.h, and does define those symbols, the linker can't find them, and I can't for the life of me figure out what library to link in for them on os x.

@ploxiln
Copy link

ploxiln commented Jan 12, 2015

I take that back - somehow I confused myself - while Mac OS X does have machine/endian.h, it doesn't define be32toh()

@dendisuhubdy
Copy link

I made this solution

sudo vi /usr/include/endian.h

ifndef FINK_ENDIANDEV_PKG_ENDIAN_H

define FINK_ENDIANDEV_PKG_ENDIAN_H 1

/** compatibility header for endian.h

  • This is a simple compatibility shim to convert
  • BSD/Linux endian macros to the Mac OS X equivalents.
  • It is public domain.
  • */

ifndef APPLE

#warning "This header file (endian.h) is MacOS X specific.\n"

endif /* APPLE */

include <libkern/OSByteOrder.h>

define htobe16(x) OSSwapHostToBigInt16(x)

define htole16(x) OSSwapHostToLittleInt16(x)

define be16toh(x) OSSwapBigToHostInt16(x)

define le16toh(x) OSSwapLittleToHostInt16(x)

define htobe32(x) OSSwapHostToBigInt32(x)

define htole32(x) OSSwapHostToLittleInt32(x)

define be32toh(x) OSSwapBigToHostInt32(x)

define le32toh(x) OSSwapLittleToHostInt32(x)

define htobe64(x) OSSwapHostToBigInt64(x)

define htole64(x) OSSwapHostToLittleInt64(x)

define be64toh(x) OSSwapBigToHostInt64(x)

define le64toh(x) OSSwapLittleToHostInt64(x)

endif /* FINK_ENDIANDEV_PKG_ENDIAN_H */

then I compiled my project, it worked pretty well (although still some warnings)

@maxtortime
Copy link

Thank you, this header file resolves my problem.
If you use http://create.stephan-brumme.com/hash-library/#keccak library in OSX,
please use this header file.

@923310233
Copy link

牛逼

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment