From b074e80e192a4ef8b6b9ef540c1185f1f7154dbe Mon Sep 17 00:00:00 2001 From: Thomas Doerfler Date: Tue, 5 May 2009 12:50:43 +0000 Subject: Added functions to translate integers to/from byte streams. --- cpukit/include/rtems/endian.h | 132 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/cpukit/include/rtems/endian.h b/cpukit/include/rtems/endian.h index 678b8bad3b..1321d244c2 100644 --- a/cpukit/include/rtems/endian.h +++ b/cpukit/include/rtems/endian.h @@ -89,4 +89,136 @@ static inline uint16_t htons( uint16_t _x ) #error "Unknown endian-ness for this cpu" #endif +static inline uint16_t rtems_uint16_from_little_endian( const uint8_t *data) +{ + uint16_t value = 0; + ssize_t i = 0; + + for (i = 1; i >= 0; --i) { + value = (uint16_t) ((value << 8) + data [i]); + } + + return value; +} + +static inline uint32_t rtems_uint32_from_little_endian( const uint8_t *data) +{ + uint32_t value = 0; + ssize_t i = 0; + + for (i = 3; i >= 0; --i) { + value = (value << 8) + data [i]; + } + + return value; +} + +static inline uint64_t rtems_uint64_from_little_endian( const uint8_t *data) +{ + uint64_t value = 0; + ssize_t i = 0; + + for (i = 7; i >= 0; --i) { + value = (value << 8) + (uint64_t) data [i]; + } + + return value; +} + +static inline uint16_t rtems_uint16_from_big_endian( const uint8_t *data) +{ + uint16_t value = 0; + size_t i = 0; + + for (i = 0; i < 2; ++i) { + value = (uint16_t) ((value << 8) + data [i]); + } + + return value; +} + +static inline uint32_t rtems_uint32_from_big_endian( const uint8_t *data) +{ + uint32_t value = 0; + size_t i = 0; + + for (i = 0; i < 4; ++i) { + value = (value << 8) + (uint32_t) data [i]; + } + + return value; +} + +static inline uint64_t rtems_uint64_from_big_endian( const uint8_t *data) +{ + uint64_t value = 0; + size_t i = 0; + + for (i = 0; i < 8; ++i) { + value = (value << 8) + (uint64_t) data [i]; + } + + return value; +} + +static inline void rtems_uint16_to_little_endian( uint16_t value, uint8_t *data) +{ + size_t i = 0; + + for (i = 0; i < 2; ++i) { + data [i] = (uint8_t) value; + value >>= 8; + } +} + +static inline void rtems_uint32_to_little_endian( uint32_t value, uint8_t *data) +{ + size_t i = 0; + + for (i = 0; i < 4; ++i) { + data [i] = (uint8_t) value; + value >>= 8; + } +} + +static inline void rtems_uint64_to_little_endian( uint64_t value, uint8_t *data) +{ + size_t i = 0; + + for (i = 0; i < 8; ++i) { + data [i] = (uint8_t) value; + value >>= 8; + } +} + +static inline void rtems_uint16_to_big_endian( uint16_t value, uint8_t *data) +{ + ssize_t i = 0; + + for (i = 1; i >= 0; --i) { + data [i] = (uint8_t) value; + value >>= 8; + } +} + +static inline void rtems_uint32_to_big_endian( uint32_t value, uint8_t *data) +{ + ssize_t i = 0; + + for (i = 3; i >= 0; --i) { + data [i] = (uint8_t) value; + value >>= 8; + } +} + +static inline void rtems_uint64_to_big_endian( uint64_t value, uint8_t *data) +{ + ssize_t i = 0; + + for (i = 7; i >= 0; --i) { + data [i] = (uint8_t) value; + value >>= 8; + } +} + #endif /* _RTEMS_ENDIAN_H */ -- cgit v1.2.3