diff --git a/src/array.c b/src/array.c index 6d9550e..ad7b4c3 100644 --- a/src/array.c +++ b/src/array.c @@ -208,6 +208,32 @@ array_uint_le (const unsigned char data[], unsigned int n) return value; } +unsigned long long +array_uint64_be (const unsigned char data[]) +{ + return ((unsigned long long) data[0] << 56) | + ((unsigned long long) data[1] << 48) | + ((unsigned long long) data[2] << 40) | + ((unsigned long long) data[3] << 32) | + ((unsigned long long) data[4] << 24) | + ((unsigned long long) data[5] << 16) | + ((unsigned long long) data[6] << 8) | + ((unsigned long long) data[7] << 0); +} + +unsigned long long +array_uint64_le (const unsigned char data[]) +{ + return ((unsigned long long) data[0] << 0) | + ((unsigned long long) data[1] << 8) | + ((unsigned long long) data[2] << 16) | + ((unsigned long long) data[3] << 24) | + ((unsigned long long) data[4] << 32) | + ((unsigned long long) data[5] << 40) | + ((unsigned long long) data[6] << 48) | + ((unsigned long long) data[7] << 56); +} + unsigned int array_uint32_be (const unsigned char data[]) { @@ -237,17 +263,6 @@ array_uint32_word_be (const unsigned char data[]) ((unsigned int) data[3] << 16); } - -void -array_uint32_le_set (unsigned char data[], const unsigned int input) -{ - data[0] = input & 0xFF; - data[1] = (input >> 8) & 0xFF; - data[2] = (input >> 16) & 0xFF; - data[3] = (input >> 24) & 0xFF; -} - - unsigned int array_uint24_be (const unsigned char data[]) { @@ -256,16 +271,6 @@ array_uint24_be (const unsigned char data[]) ((unsigned int) data[2] << 0); } - -void -array_uint24_be_set (unsigned char data[], const unsigned int input) -{ - data[0] = (input >> 16) & 0xFF; - data[1] = (input >> 8) & 0xFF; - data[2] = input & 0xFF; -} - - unsigned int array_uint24_le (const unsigned char data[]) { @@ -289,6 +294,80 @@ array_uint16_le (const unsigned char data[]) ((unsigned int) data[1] << 8); } +void +array_uint64_be_set (unsigned char data[], const unsigned long long input) +{ + data[0] = (input >> 56) & 0xFF; + data[1] = (input >> 48) & 0xFF; + data[2] = (input >> 40) & 0xFF; + data[3] = (input >> 32) & 0xFF; + data[4] = (input >> 24) & 0xFF; + data[5] = (input >> 16) & 0xFF; + data[6] = (input >> 8) & 0xFF; + data[7] = (input ) & 0xFF; +} + +void +array_uint64_le_set (unsigned char data[], const unsigned long long input) +{ + data[0] = (input ) & 0xFF; + data[1] = (input >> 8) & 0xFF; + data[2] = (input >> 16) & 0xFF; + data[3] = (input >> 24) & 0xFF; + data[4] = (input >> 32) & 0xFF; + data[5] = (input >> 40) & 0xFF; + data[6] = (input >> 48) & 0xFF; + data[7] = (input >> 56) & 0xFF; +} + +void +array_uint32_be_set (unsigned char data[], const unsigned int input) +{ + data[0] = (input >> 24) & 0xFF; + data[1] = (input >> 16) & 0xFF; + data[2] = (input >> 8) & 0xFF; + data[3] = (input ) & 0xFF; +} + +void +array_uint32_le_set (unsigned char data[], const unsigned int input) +{ + data[0] = (input ) & 0xFF; + data[1] = (input >> 8) & 0xFF; + data[2] = (input >> 16) & 0xFF; + data[3] = (input >> 24) & 0xFF; +} + +void +array_uint24_be_set (unsigned char data[], const unsigned int input) +{ + data[0] = (input >> 16) & 0xFF; + data[1] = (input >> 8) & 0xFF; + data[2] = (input ) & 0xFF; +} + +void +array_uint24_le_set (unsigned char data[], const unsigned int input) +{ + data[0] = (input ) & 0xFF; + data[1] = (input >> 8) & 0xFF; + data[2] = (input >> 16) & 0xFF; +} + +void +array_uint16_be_set (unsigned char data[], const unsigned short input) +{ + data[0] = (input >> 8) & 0xFF; + data[1] = (input ) & 0xFF; +} + +void +array_uint16_le_set (unsigned char data[], const unsigned short input) +{ + data[0] = (input ) & 0xFF; + data[1] = (input >> 8) & 0xFF; +} + unsigned char bcd2dec (unsigned char value) { diff --git a/src/array.h b/src/array.h index f0f54cd..5cdd1a1 100644 --- a/src/array.h +++ b/src/array.h @@ -66,6 +66,12 @@ array_uint_be (const unsigned char data[], unsigned int n); unsigned int array_uint_le (const unsigned char data[], unsigned int n); +unsigned long long +array_uint64_be (const unsigned char data[]); + +unsigned long long +array_uint64_le (const unsigned char data[]); + unsigned int array_uint32_be (const unsigned char data[]); @@ -75,15 +81,9 @@ array_uint32_le (const unsigned char data[]); unsigned int array_uint32_word_be (const unsigned char data[]); -void -array_uint32_le_set (unsigned char data[], const unsigned int input); - unsigned int array_uint24_be (const unsigned char data[]); -void -array_uint24_be_set (unsigned char data[], const unsigned int input); - unsigned int array_uint24_le (const unsigned char data[]); @@ -93,6 +93,30 @@ array_uint16_be (const unsigned char data[]); unsigned short array_uint16_le (const unsigned char data[]); +void +array_uint64_be_set (unsigned char data[], const unsigned long long input); + +void +array_uint64_le_set (unsigned char data[], const unsigned long long input); + +void +array_uint32_be_set (unsigned char data[], const unsigned int input); + +void +array_uint32_le_set (unsigned char data[], const unsigned int input); + +void +array_uint24_be_set (unsigned char data[], const unsigned int input); + +void +array_uint24_le_set (unsigned char data[], const unsigned int input); + +void +array_uint16_be_set (unsigned char data[], const unsigned short input); + +void +array_uint16_le_set (unsigned char data[], const unsigned short input); + unsigned char bcd2dec (unsigned char value);