一 题目
给出一个整数,转换成16进制的字符输出。
二 问题分析
利用进制转换方法:用按权展开法。
然后,1500
的十六进制转换结果为:5DC
三 代码
3.1 C实现
char * convertToBase16(int num)
{
if (!num)
{
return "0";
}
char * retstr = (char *)malloc(12*sizeof(char)); // 分配存放区域
memset(retstr, '0', 12*sizeof(char));
if (num < 0)
{
strcat(retstr, "-");
num = -num;
}
char arr[12];
memset(arr, 0, 12*sizeof(char));
int i = 0;
while (num > 0)
{
arr[i] = (char)(num % 16 + '0');
num = num / 16;
i++;
}
i--;
for ( ; i >= 0; i--)
{
strncat(retstr, arr+i, 1);
}
return retstr;
}
Tips:
void memset(void * str, int c, size_t n);
复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前n个字符
char * strcat(char * dest, const char * src);
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾
char *strncat(char *dest, const char *src, size_t n)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
3.2 C++实现
string convertToBase16(int num)
{
string s;
// boundary
if (!num)
return "0";
int flag = 0;
if (num < 0)
{
flag = 1;
num = -num;
}
char reset;
while (num > 0)
{
reset = char(num % 16) + '0';
num = num / 16;
s = reset + s; //后得到的,写在前面,进制转换的计算方法
}
if (flag)
s = '-' + s;
return s;
}