将 long 转换为 6 个字母的十六进制字符串

Convert long to 6 letter hex string

我有一个很长的值,我想将它转换成 6 位十六进制字符串。

我的尝试:

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' 的值以提供给 calloc?

2) 如何让字符串只有 6 个十六进制字符?

谢谢。

十六进制位数可以这样计算:

int numberOfHexDigits(long ID)
{
    int n=0;
    if (ID==0) {
        return 1;
    }
    while (ID!=0) 
    {
        ID >>= 4;
        n++;
    }
    return n;
}

使用 calloc(或 malloc)分配仅 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);