Print 2 numbers stored in 24-bits in decimal format
Your code loops from the high order byte to the low order byte, printing each byte as 2 hex digits.

If you want instead to print the first byte as a decimal value, and then the remaining bytes as another decimal value, then do this:

Print byte 0 in base 10:

    Serial.print(data[0]);  //first byte
    Serial.print(":");


Then loop through the remaining bytes, building a result as a decimal value, and print that:

unsigned long total = 0;
for (int i=1; i&lt;bytes; i++) //Skip the first byte
{
    total = total &lt;&lt; 8;  //Shift the previous total by 8 bits. 
                         //(The same as multiplying by 256, but faster)
    total += data[i];    //Add in the new value
}
Serial.println(total);


The sample code you posted is written to handle a variable number of bytes. The code above does the same thing with decimal results. It's much simpler if you know you will always have 3 bytes or 4 bytes:

For 3 bytes:

    Serial.print(data[0]);  //first byte
    Serial.print(":");
    long total = long(data[1])*256 + data[2]);
    Serial.println(long(total);