我有一个很长的值,我想把它转换成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);