Преобразовать длинную шестнадцатеричную шестнадцатеричную строку - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть длинное значение, и я хотел бы преобразовать его в шестнадцатеричную строку 6 di git.

My Try:

long ID = some value;

char * hex = (char *) calloc(n, sizeof(char)); // dynamic memory required.

int c = sprintf(hex, n+1, "%x", ID);

assert(c == ID);

1) Как мне найти значение 'n', чтобы дать callo c?

2) как сделать так, чтобы в строке было всего 6 шестнадцатеричных символов?

Спасибо.

1 Ответ

2 голосов
/ 23 апреля 2020

Количество шестнадцатеричных цифр можно вычислить следующим образом:

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);
...