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