十进制转换(2、8、16)

来源:互联网 发布:moto z force网络参数 编辑:程序博客网 时间:2024/06/05 18:03

十进制转换其他进制

char*  dec_to_bin(int x){    char *table = "01";    static char arr[33];    arr[32] = '\0';    int i = 31;    if (x >= 0)    {        memset(arr, '0', 32);        while (x)        {            arr[i--] = table[x % 2];            //x /= 2;            x >>= 1;        }    }    if (x < 0)    {        memset(arr, '1', 32);        for (int j = 0;j < 32;j++)        {            arr[i--] = table[x & 0x01];            x >>= 1;        }    }    return arr;}char*  dec_to_oct(int x){    char *table = "01234567";    static char arr[12];//32位每3位组成一个8进制数,因此有11个元素,加一个'\0'    arr[11] = '\0';    int i = 10;    if (x >= 0)    {        memset(arr, '0', 11);        while (x)        {            arr[i--] = table[x % 8];            x /= 8;        }    }      if (x < 0)    {        memset(arr, '1', 11);        for (int j = 0;j < 10;j++)        {            arr[i--] = table[x & 0x07];            x >>= 3;        }        arr[i] = table[x & 0x03];    }    return arr;}char*  dec_to_hex(int x){    char *table = "0123456789abcdef";    static char arr[9];    arr[8] = '\0';    int i = 7;    if (x >= 0)    {        memset(arr, '0', 8);        while (x)        {            arr[i--] = table[x & 0xf];            x >>=4;        }    }    if (x < 0)    {        memset(arr, '1', 8);        for (int j = 0;j < 8;j++)        {            arr[i--] = table[x & 0xf];            x >>= 4;        }    }    return arr;}