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(" ");
}