You are here: Home / Past Courses / Spring 2017 - ECPE 170 / Labs / Endian Byte-Swap Macros

Endian Byte-Swap Macros

C header icon endian.h — C header, 1 KB

File contents

#ifndef ENDIAN_H
#define ENDIAN_H

// Intel Byte-Swap Macros from 
// http://download.intel.com/design/intarch/papers/endian.pdf

#define SwapTwoBytes(data) \
( (((data) >> 8) & 0x00FF) | (((data) << 8) & 0xFF00) ) 

#define SwapFourBytes(data)   \
( (((data) >> 24) & 0x000000FF) | (((data) >>  8) & 0x0000FF00) | \
  (((data) <<  8) & 0x00FF0000) | (((data) << 24) & 0xFF000000) ) 

#define SwapEightBytes(data)   \
( (((data) >> 56) & 0x00000000000000FF) | (((data) >> 40) & 0x000000000000FF00) | \
  (((data) >> 24) & 0x0000000000FF0000) | (((data) >>  8) & 0x00000000FF000000) | \
  (((data) <<  8) & 0x000000FF00000000) | (((data) << 24) & 0x0000FF0000000000) | \
  (((data) << 40) & 0x00FF000000000000) | (((data) << 56) & 0xFF00000000000000) ) 


// Usage example:
// uint16_t twoByteValue;  // 16-bit long number
//
// twoByteValue = SwapTwoBytes(twoByteValue);

#endif // ENDIAN_H