Количество шестнадцатеричных цифр можно вычислить следующим образом:
int numberOfHexDigits(long ID)
{
int n=0;
if (ID==0) {
return 1;
}
while (ID!=0)
{
ID >>= 4;
n++;
}
return n;
}
Использование callo c (или mallo c) для выделения памяти всего на 7 байтов является расточительным. Я полагаю, у вас есть причина для этого. Вам лучше просто сделать это:
const int nDigits = 6;
char hex[nDigits+1];
snprintf(hex, sizeof(hex), "%lx", ID);
Если вы действительно хотите выделить память в куче:
int bufSize = numberOfHexDigits(ID)+1;
char *hex = (char *) malloc(bufSize);
snprintf(hex, bufSize, "%lx", ID);