String DIGIT_to_HEX(uint64_t NumIN64) {
//
// https://forum.arduino.cc/t/best-way-to-get-hex-string/645539/9
//
// input : 999999999999999999; // -MAX- 18 digits
// output: DE0B6B3A763FFFF
char myData[19] = "";
char myCode[19] = "";
int8_t i = 0, j = 0;
uint8_t ItmCntr8 = 0;
//
String s_HexOUT;
s_HexOUT.reserve(18);
//
do {
//
myData[i] = NumIN64 % 16;
//
if (myData[i] < 10) {
myData[i] = myData[i] + 0x30; //0 - 9 : 0x30 - 0x39
ItmCntr8 += 1;
} else {
myData[i] = myData[i] + 0x37; //A - F : 0x41 - 0x46
ItmCntr8 += 1;
} // if-else
//
NumIN64 = NumIN64 / 16;
//
i++;
//
} while (NumIN64 != 0);
//
if (ItmCntr8 > 1) {
//
ItmCntr8 -= 1;
//
if (ItmCntr8 < 20) {
//
for (i = ItmCntr8; i >= 0; i--) {
//
if (j <= ItmCntr8) myCode[j] = myData[i];
j += 1;
//
} // for
//
return String(myCode);
//
} // if
//
} else if (ItmCntr8 == 1) {
// just ONE Hex value
return String(myData[0]);
// 0-15 --> 0-F
} // if-else
// empty String:
return String("");
//
} // DIGIT_to_HEX()
void setup() {
//
Serial.begin(115200);
//
uint64_t Num64 = 999999999999999999; // -MAX- 18 digits
// 999999999999999999 ==> DE0B6B3A763FFFF
String s_NumHEX = DIGIT_to_HEX(Num64);
//
Serial.print(F("Num64 = "));
Serial.println(Num64); // 999999999999999999 --> 18 digits [MAX!]
Serial.print(F("s_NumHEX = "));
Serial.println(s_NumHEX); // DE0B6B3A763FFFF
//
Num64 = 15;
s_NumHEX = DIGIT_to_HEX(Num64);
//
Serial.print(F("Num64 = "));
Serial.println(Num64); // 15
Serial.print(F("s_NumHEX = "));
Serial.println(s_NumHEX); // F
} // setup()
void loop() {
//
} // loop()