Adding leading zeros to HEX

Note: This is a old topic, but I think it is on topic and was the first I found so I thought it was best to keep it together with the other methods.

Here is a method to print HEX digits with leading zeros that uses shifts and masks instead of strings.

Calling:

    unsigned long DATA = thePacket.asInt;

    Serial.print("  1-Digit=");  crPrintHEX(DATA,1);
    Serial.print("  4-Digits="); crPrintHEX(DATA,4);
    Serial.print("  7-Digits="); crPrintHEX(DATA,7);
    Serial.print("  8-Digits="); crPrintHEX(DATA,8);

Output:

Prints: 1-Digit=E    4-Digits=017E    7-Digits=000017E    8-Digits=0000017E

Subroutine:

//---------------------------------------------------------------------------------
// crPrintHEX
//---------------------------------------------------------------------------------

void crPrintHEX(unsigned long DATA, unsigned char numChars) {
    unsigned long mask  = 0x0000000F;
    mask = mask << 4*(numChars-1);
    
    for (unsigned int i=numChars; i>0; --i) {
         Serial.print(((DATA & mask) >> (i-1)*4),HEX);
         mask = mask >> 4;
        }
        
    Serial.print("  ");
}