From 99c3d258d4a56c70c4d553e1f0579222d8c16c2f Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Wed, 11 Mar 2009 10:18:05 +0000 Subject: [PATCH] Added byte order conversion functions (little and big endian). --- src/array.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/array.h | 18 ++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/src/array.c b/src/array.c index b3241e4..8484ecd 100644 --- a/src/array.c +++ b/src/array.c @@ -48,3 +48,44 @@ array_reverse_bits (unsigned char data[], unsigned int size) data[i] = j; } } + + +unsigned int +array_uint32_be (const unsigned char data[]) +{ + return (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]; +} + + +unsigned int +array_uint32_le (const unsigned char data[]) +{ + return data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24); +} + + +unsigned int +array_uint24_be (const unsigned char data[]) +{ + return (data[0] << 16) + (data[1] << 8) + data[2]; +} + + +unsigned int +array_uint24_le (const unsigned char data[]) +{ + return data[0] + (data[1] << 8) + (data[2] << 16); +} + +unsigned short +array_uint16_be (const unsigned char data[]) +{ + return (data[0] << 8) + data[1]; +} + + +unsigned short +array_uint16_le (const unsigned char data[]) +{ + return data[0] + (data[1] << 8); +} diff --git a/src/array.h b/src/array.h index 7580fb8..cc53dc2 100644 --- a/src/array.h +++ b/src/array.h @@ -32,6 +32,24 @@ array_reverse_bytes (unsigned char data[], unsigned int size); void array_reverse_bits (unsigned char data[], unsigned int size); +unsigned int +array_uint32_be (const unsigned char data[]); + +unsigned int +array_uint32_le (const unsigned char data[]); + +unsigned int +array_uint24_be (const unsigned char data[]); + +unsigned int +array_uint24_le (const unsigned char data[]); + +unsigned short +array_uint16_be (const unsigned char data[]); + +unsigned short +array_uint16_le (const unsigned char data[]); + #ifdef __cplusplus } #endif /* __cplusplus */