I2C Registers

You really have to start with the datasheet for the specific I2C device you are working with.

Here is one where I needed to read a word (2 byte) register from a I2C ADC device. First I had to send a single byte 'register pointer' to the device and then request two bytes from the device.

//Function to read ADC conversion data from device 
int getadcReading()   // read 16 bit analog voltage reading
{
  int data;
  const int deviceAdd = 0x48;              // ADS1115 address with address pin grounded
  Wire.beginTransmission(deviceAdd); // transmit to I2c device address
  Wire.send(0x00);                   // point to device register 0 
  Wire.endTransmission();            // stop transmitting

  Wire.requestFrom(deviceAdd, 2);    // request 2 bytes from slave device
  while(Wire.available())            // need two bytes, MSB and LSB of converstion value
  { 
    data = Wire.receive();         // get MSB of reading
    data = data << 8;              // shift it to high byte of data
    data = data + Wire.receive();  // add LSB to data
  }
  return data;
}

Lefty