How to convert a 48-bit byte array into an 64-bit integer in C?
c, endianness, type-conversion, unix-timestamp
Solution
A C99 implementation may offer `uint64_t` (it doesn't have to provide it if there is no native fixed-width integer that is exactly 64 bits), in which case, you could use:
#include <stdint.h>
unsigned char data[6] = { /* bytes from somewhere */ };
uint64_t result = ((uint64_t)data[0] << 40) |
((uint64_t)data[1] << 32) |
((uint64_t)data[2] << 24) |
((uint64_t)data[3] << 16) |
((uint64_t)data[4] << 8) |
((uint64_t)data[5] << 0);
If your C99 implementation doesn't provide `uint64_t` you can still use `unsigned long long` or (I think) `uint_least64_t`. This will work regardless of the native endianness of the host.
Problem
I have an unsigned char array whose size is 6. The content of the byte array is an integer (4096*number of seconds since Unix Time). I know that the byte array is big-endian. Is there a library function in C that I can use to convert this byte array into int_64 or do I have to do it manually? Thanks! PS: just in case you need more information, yes, I am trying to parse an Unix timestamp. Here is the format specification of the timestamp that I dealing with.