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

问题描述 投票:0回答:1

我有一个很长的值,我想把它转换成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个十六进制字符?

谢谢。

c char hex dynamic-programming data-conversion
1个回答
2
投票

十六进制数字的数量可以这样计算。

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);
© www.soinside.com 2019 - 2024. All rights reserved.