思路
base 是要转换的基树, n % base 拿到的数就是改进制的最低位,缓存起来;然后通过 n / base 来处理下一位并存入缓存;别忘了在最后加上'\0',缓存中的数字和原来是相反的,所以需要反转过来后复制到结果中,但是注意,复制的长度是 len + 1,因为要复制 '\0'
代码实现
static char hexMetric[16] = { \
'0', '1', '2', '3', \
'4', '5', '6', '7', \
'8', '9', 'A', 'B', \
'C', 'D', 'E', 'F', \
};
int int2HexStr(char * str, int num){
if(NULL == str){
printf("int2HexStr param error\n");
return PARAM_ERR;
}
int base = 16;
int len = 0, n = 0, a = 0, k = 0;
char buf[100] = {'0'};
n = num;
do {
a = n % base;
n = n / base;
buf[len++] = hexMetric[a];
} while(n != 0);
buf[len] = '\0';
strReversWithWord(buf);
str[0] = '0';
str[1] = 'x';
str = str + 2;
memcpy(str, buf, len);
return SUCCESS;
}
static char binMetric[16] = { \
'0', '1' \
};
int int2BinStr(char * str, int num){
if(NULL == str){
printf("int2BinStr param error\n");
return PARAM_ERR;
}
int base = 2;
int len = 0, n = 0, a = 0, k = 0;
char buf[100] = {'0'};
n = num;
do {
a = n % base;
n = n >> 1;
buf[len++] = binMetric[a];
} while(n != 0);
buf[len] = '\0';
strReversWithWord(buf);
str[0] = '0';
str[1] = 'b';
str = str + 2;
memcpy(str, buf, len);
return SUCCESS;
}
void testConvertNum2Str(void){
char str[100] = {'0'};
int num = 456789;
printf("\n************ testConvertNum2Str ************ \n");
int2HexStr(str,num);
printf("The hex str is %s\n", str);
int2BinStr(str,num);
printf("The bin str is %s\n", str);
return;
}
代码编译
gcc main.c str.c -g -o a.exe
调试输出
************ testConvertNum2Str ************
The hex str is 0x6F855
The bin str is 0b1101111100001010101