C语言中的进制怎么转换啊

如题所述

    任意进制之间的进制转换。需要考虑高精度整形的设计,用数组模拟一个整形变量。一位一位的进行进制转换,算法思想和十进制转换到二进制相同,除以目标进制,余数为低位。这种进制转换实用性不强,一般出现在计算机程序竞赛当中。

    8,10,16进制的转换。在C语言中有不少函数都能实现上面几种进制之间的进制转换。

    推荐其中的sprintf/sscanf函数。

    sprintf格式的规格如下所示。[]中的部分是可选的。
    %[指定参数][标识符][宽度][.精度]指示符
    若想输出'%'本身时, 请使用'%%'处理。
    1. 处理字符方向。负号时表示从后向前处理。
    2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
    3. 字符总宽度。为最小宽度。
    4. 精确度。指在小数点后的浮点数位数。
    转换字符
    %% 印出百分比符号,不转换。
    %c 整数转成对应的 ASCII 字元。
    %d 整数转成十进位
    %f 倍精确度数字转成浮点数。
    %o 整数转成八进位。
    %s 整数转成字符串
    %x 整数转成小写十六进位。
    %X 整数转成大写十六进位。

    例程(16进制和10进制之间的转换):

        #include <stdio.h>  
        #include <limits.h>  
        int main()  
        {  
            char s[100] = {0};  
            sprintf(s, "%x", INT_MAX);  
            printf("%s\n", s); // 7fffffff  
            char str[100] = "7fffffff";  
            int i = 0;  
            sscanf(str, "%x", &i);  
            printf("%d\n", i); // 2147483647  
            return 0;   
        }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-18
关于进制转换,我觉得挺好玩的不就是几个公式吧了,
就如我第一次所学的二进制转换为十进制,十进制转换为二进制,那样的类型其实也挺有趣的
比如:一个二进制数转化为十进制数,如哦我所给的一个二进制数“101101001”我就设十进制数是Z
首先有个公式可套:Z=1*X8+0*X7+1*X6+1*X5+0*X4+1*X3+0*X2+0*X1+1*X0
把只是X换为2,算出来的就是你所得到的此二进制数所对应的十进制数
同理:如八进制数转换为十进制数就是把X换为8,十六进制数转换十进制数把X换为16,
至于二进制数转化为八进制数更有意思;
首先我引进一个例子:这是一个比较特殊的二进制数:111111111111
首先把这组数按三个数划分一组(从右开始划分):如,111,111,111,111 于是结果是7777
然后就分别把化为各组的数组转化为是进制数,最后进把你刚才算出的数按原来的顺序排起来,于是得到的结果就是你想要的
那十六进制就是把数组中的每四个划分一组(从右开始划分的)
如111111111111划分结果为1111,1111,1111, 方法与上面一样,于是它的结果是fff

关于十进制转化二进制,八进制和十六进制,方法都是一样的
同二进制方法雷同。本回答被网友采纳
第2个回答  2013-11-18
用一个函数搞定
任意进制间的转换
#include <stdio.h>
#include <string.h>
#include <math.h>
/*该函数可以实现小于整型数据的任意进制之间转换*/
/*以下函数将a进制数s转换成b进制并输出*/
void f(int a,int b,char s[])
{ char r[17];
int i,n,t,k;
for(n=strlen(s)-1,i=t=0;*(s+i)!='\0';i++,n--) /*这里先转换成十进制数*/
{ if(*(s+i)<='9')
t+=(*(s+i)-'0')*int(pow(a,n));
else
t+=(*(s+i)-'A'+10)*int(pow(a,n));
}
for(i=0;t!=0;i++) /*再转换成b进制*/
{ k=t%b;
if(k>9)r[i]='A'+k-10;
else r[i]='0'+k;
t/=b;
}
r[i]='\0';
s=strrev(r);
printf("%s",s);
}
/*******************************
*******************************
******************************/
第3个回答  2013-11-18
前面的是告诉你原理,后面的是告诉你使用,我推荐后面个
sprintf 将字串格式化。
  在头文件 #include<stdio.h>中
  语法: string sprintf(string format, mixed [args]...);
  传回值: 字串
  1. 处理字符方向。-负号时表时从后向前处理。
  2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
  3. 字符总宽度。为最小宽度。
  4. 精确度。指在小数点后的浮点数位数。
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  转换字符
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  % 印出百分比符号,不转换。
  b 整数转成二进位。
  c 整数转成对应的 ASCII 字元。
  d 整数转成十进位。
  f 倍精确度数字转成浮点数。
  o 整数转成八进位。
  s 整数转成字串。
  x 整数转成小写十六进位。
  X 整数转成大写十六进位。
第4个回答  2013-11-18
用sprintf()用法可以参考这个

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网