I2C reading register value for SM72442

Hello,

I am working on a senior project for a portable solar charge using the SM72442 IC. We are using an arduino uno to connect to the I2C.

I am having trouble with reading the value from the register because the values that I need to read are not in nice 1 byte segments. (as seen in the link to the data: http://www.ti.com/lit/ds/symlink/sm72442.pdf

From reading other forums, I understand the typical I2C protocol and such, but I want to know how I should access the data that I want. So far I have something like :

Wire.requestFrom(device_address,7); //send 7 bytes of data back to arduino
uint64_t a = Wire.read(); //reads first byte
uint64_t b = Wire.read();
uint64_t c = Wire.read();
uint64_t d = Wire.read();
uint64_t e = Wire.read();
uint64_t f = Wire.read();
uint64_t g = Wire.read();
b = b << 8;
c = c << 16;
d = d << 24;
e = e << 32;
f = f << 40;
g = g << 48;

uint64_t reg_info = a|b|c|d|e|f|g;

from this I was wondering if this is the most efficient way to get the data? Im not sure if I should be storing the data as a string and then try to find a way to get 0:9 bits to read the actual value or something else? I’m really at a loss right now.

from this I was wondering if this is the most efficient way to get the data?

It's probably not the most efficient way but it should work. I would read the data into an array and then pick the bits from it as I need it. Processing 64bit values on an 8bit processor is not very efficient.