进制转换函数

一般常用到的进制转换大概就是二进制与十进制,十进制与十六进制,二进制与十六进制之间的转换,好像<stdlib.h>里的itoa函数可以做一些进制转换,不过我还是想自己造造轮子。二进制或十六进制转到十进制很简单,比如我们要将二进制数1011转为十进制表示,你会发现,1011=101*2+1 而101=10*2+1,10=1*2+0,1=0*2+1,也就是说1011可以由((((0*2+1)*2+0)*2)+1)+1来表示,由于计算机在算这一串表达式时基于的是十进制,所以结果就自然而然地转为了十进制。十六进制也是一样的,唯一的差别在于,乘的数应该是16而非2。

int ToDec(char *a,int radix)
{
    int i;
    int dec = 0;
    for (i = 0; i < strlen(a); i++) {
        if (isdigit(a[i]))
            dec = dec * radix + (a[i] - ‘0‘);
        else if (a[i] >= ‘a‘&&a[i] <= ‘f‘)
            dec = dec * radix + (a[i] - ‘a‘ + 10);
        else if (a[i] >= ‘A‘&&a[i] <= ‘F‘)
            dec = dec * radix + (a[i] - ‘A‘ + 10);
        else {
            printf("error,please check your input\n");
            return -1;
        }
    }
    return dec;
}

将十进制转为二进制和八进制其实不过是将上面的过程逆过来而已,比如我们要将15转为二进制,那么我们只要用15%2就得到了最低位的数字1,然而我们(15/2)%2便得到了右起第二位的数字1,依次下去,我们便得到了15的二进制表示1111。十六进制转十进制也是基于同样的原理。

void decTo(int dec, char *arr, int radix)
{
    int i=0;
    int tmp;
    while (dec > 0) {
        if ((tmp = dec%radix) >= 0 && tmp < 10)
            arr[i++] = tmp+‘0‘;
        else if (tmp >= 10 && tmp <= 15)
            arr[i++] = ‘A‘ + (tmp - 10);
        else
            printf("error:radix bigger than hex");
        dec /= radix;
    }
    arr[i] = ‘\0‘;
    _strrev(arr);
}

二进制与十六进制之间的转换也是十分简单,考虑到一个十六进制位对应四个二进制位。可以直接建立一张列表记录他们之间的对应关系(可以考虑用结构体数组充当列表),然后执行转换时查查表就是了,值得注意的是,当二进制数位数不为8的倍数时,有必要通过在前面添加0的方式将其补成8的倍数(用strncpy,strcmp,strcat函数应该不难)。由于笔者突然不想写代码了,这个转换函数就不放代码了。

时间: 2024-10-12 17:27:35

进制转换函数的相关文章

php进制转换函数

php进制转换函数如下: bindec() — 二进制转换为十进制decbin() — 十进制转换为二进制dechex() — 十进制转换为十六进制decoct() — 十进制转换为八进制hexdec() — 十六进制转换为十进制octdec() — 八进制转换为十进制base_convert()– 在任意进制之间转换数字 一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin() 函数,如下实例 echo decbin(12); //输出 1100 echo

万能进制转换函数

在做操作系统作业的时候,需要把十进制的数转换成八进制,在网上巧遇到一个十进制数转换成八进制的函数:oid tran(int a) { if(!a)return ; tran(a/8); cout < <a%8; } 然后我把它改成万能进制转换函数:void tran(int num,int jinzhi) { if(!num) { return; } tran(num/jinzhi,jinzhi); cout<<num%jinzhi; } 我只能感概lz太强大了

Python中进制转换函数的使用

Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到二进制).oct()(十进制转换到八进制).hex()(十进制转换到十六进制). 下面我们逐个说下每个函数的用法. bin bin()函数,是将十进制的数字转换成二进制的数字.其中bin()函数中传入的是十进制的数字,数据类型为数字类型. v = 18 num = bin(v) print(num)

SQL Server 进制转换函数

一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下面的映射表“: (Figure1:效果图) 二.十进制转换为十六进制 在网上有很多资料关于使用SQL语句把十进制转换为十六进制的资料,比如: --方式1 SELECT CONVERT(VARBINARY(50), 23785) 执行返回值为0x00005CE9,但是需要注意的是,这本应该返回二进制的

c语言将字符串转成int,将int转成字符串。附带任意进制转换函数

在网上看到各种将字符串转成int,和int转成字符串的方法.我自己比较喜欢用的方法是下面的,记住模板就行,最开始我也老是记不住,找到规律,多用几遍就好了. 1.将字符串转成int char s[20] = "123456";   // 注如果此处不是数字字符串类型,如下面的字符串  12abc -->  12        ab12 --> 0 int a = 0; sscanf(s,"%d",&a);   // a = 123456   就得到

一起talk C栗子吧(第七回:C语言实例--进制转换)

各位看官们.大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们.上一回中咱们说的是生成随机数的样例.这一回咱们说的样例是:进制转换.说到进制预计大家 都不陌生.计算机中的进制有二进制.八进制,十进制,十六进制. 今天咱们将要说的是十进制怎样转换成二进制.八进制和十六进制.在这里我把敲代码的步骤和算法思路 写出来供大家參考. 1.获取用户想要转换的数值和想到转换的进制.这里要检查输入是否正确.这是程序健壮性的体现

Python内置函数进制转换的用法

使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns a

Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)

使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns a

03 php 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换,算术运算,比较运算

03 数据类型:整数,进制转换,浮点,字符,布尔,数组,空类型,类型转换, 算术运算,比较运算,逻辑运算,短路现象, 三目运算符,字符型运算: 数据类型 整体划分 标量类型: int, float, string, bool 复合类型: array,     object 特殊类型: null,     resouce 整数类型int, integer 3种整数表示法 十进制写法:123: $n1 = 123; 八进制写法: 0123 $n2 = 0123; 十六进制写法: 0x123 $n3