欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单题目:给出一个整数,转换为16进制的字符

程序员文章站 2022-03-09 10:06:48
...

一 题目

给出一个整数,转换成16进制的字符输出。

二 问题分析

利用进制转换方法:用按权展开法。

简单题目:给出一个整数,转换为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;
}