用c语言实现进制转换

简介: 用c语言实现进制转换

这两天做题遇见了进制转换的问题,在网上看了他人的想法后自己的一些实践:


目录

关于进制转换的问题和思考

1.将十进制以下的数据转换为十进制

2.将十进制的数据转换为十进制以上

3.十六进制转换成十进制


关于进制转换的问题和思考

(1)高于十进制的数据转换成十进制的时候会设计字母转换数据的问题,则我们可以借助ascll码进行转换

(2)高于十进制的数据转换时要涉及依次识别数据将数字和字母分情况进行转换

1.将十进制以下的数据转换为十进制

#include <stdio.h>
#include <math.h>
#include <string.h>
int lessten_ten(int before,int num) //转换十进制以下的到十进制
{
  int i;  //定义循环变量
  double result = 0;
  for (i = 0; num!=0; i++)   //倒向循环便利于进行十进制的换算
  {
    //下面调用了math头文件中的函数,pow用来计算x的y幂次-->pow(double x,double y)
       result +=(num % before) * pow((double)10, (double)i); //把数据转换成十进制
     num = num / before;
  }
  return (int)result;
}

image.gif

这里在进行转换时利用了pow函数,这个函数来自于头文件math.h中,主要用来计算的是x的y幂次的结果,且要求x和y都为double类型,如果前面设置为int要进行强转换,否则运行时会报错


2.将十进制的数据转换为十进制以上

char * ten_moreten(int after, int num)  //十进制转换十进制以上
{
  int i = 0;
  int j = 0;
  int tmp = 0;    //存储余数
  char tmp_array[] = "\0";     //转换后的数组
  char* array[100];
  for (i = 0; num > 0; i++)
  {
    tmp = num % after;
    if (tmp < 10)
      tmp_array[i] = tmp + '0';
    else
      tmp_array[i] = tmp + 'A' - 10;  //把余数大于9的转换成字母
    num = num / after;     //让余数继续循环
  }
  for (j = 0; i > 0; i--, j++)   //实现数组元素的倒置输出
  {
    array[j] = tmp_array[i - 1];
    array[j + 1] = '\0';
  }
  return array;
}

image.gif

十进制以上的数据进行转换时问题在于如何把9以上的数据转换成字母,这里运用了ascll码值进行转换,通过数据的运算最后可以把两位数转换成字母,随后产生的数据是一个倒置的数据,又需要用循环结构把临时数组里面的数据倒置过来赋予真正输出的数组,最后返回数组的地址即可


3.十六进制转换成十进制

double sixteen_ten(char arr[]) 
{
  int lenth = (int)strlen(arr);
  double result=0;
  int i;
  for (i = lenth-1; i >=0; i--)  
  {
    if ('A' <= arr[i] && arr[i] <= 'Z')
      result = result + pow(16, lenth - i - 1) * (arr[i] - 55); 
    else if('0' <= arr[i] && arr[i] <= '9')
      result = result + pow(16, lenth-i-1) * (arr[i]-48);
  }
  return result;
}

image.gif

这里只列举出了十六进制的转换方式,其他方式和十六进制的转换方式基本相同,利用循环结构依次识别判断包含十六进制的数组中各个元素所包含的数据是数字还是字母,如果是字母也是利用ascll码值进行一个转换,最后用pow函数可以计算出十进制的数字


最终函数根据所需的环境进行函数的引用即可

相关文章
|
3月前
|
存储 编译器 C语言
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
|
3月前
|
C语言
C语言进制转换
C语言进制转换
|
3月前
|
C语言
C语言常见的进制转换
C语言常见的进制转换
|
3月前
|
存储 编译器 C语言
C语言:进制转换以及原码、反码、补码
C语言:进制转换以及原码、反码、补码
|
3月前
|
数据处理 C语言
【C语言宝库】- 操作符|详解进制转换|计算机小白必备技能(上)
【C语言宝库】- 操作符|详解进制转换|计算机小白必备技能(上)
59 0
|
3月前
|
存储 编译器 C语言
c语言进制转换、操作符万字详解------附带多道经典习题
常用的进制分类 二进制:由0和1组成 八进制:由0~7数字组成 十进制:由0~9数字组成 十六进制:由0~9和A~F组成
|
9月前
|
C语言
【C语言航路外传】进制转换
【C语言航路外传】进制转换
48 0
|
9月前
|
C语言
C语言的进制转换
C语言的进制转换
|
存储 C语言
c语言之进制转换复习(一)
c语言之进制转换复习(一)
|
C语言
c语言进制转换 栈的操作
c语言进制转换 栈的操作