C语言之任意进制的转换

简介: 我们都知道转换进制是一个让人比较头疼的事情,下面我的代码不是最好的,也就仅仅是一个思路而已,至少我认为使用栈来进行进制转换是比较合适的一种方法,好了,不多叙述了。#include#include/* 函数trans将无符号整数n翻译成d(2

我们都知道转换进制是一个让人比较头疼的事情,下面我的代码不是最好的,也就仅仅是一个思路而已,至少我认为使用栈来进行进制转换是比较合适的一种方法,好了,不多叙述了。

#include<stdio.h>
#include<stdlib.h>
/* 函数trans将无符号整数n翻译成d(2<=d<=16)进制表示的字符串s */
#define M sizeof(unsigned int)*8
int trans(unsigned n, int d, char s[])
{
    static char digits[] ="0123456789ABCDEF"; /* 十六进制数字的字符 */
    char buf[M+1];
    int j, i = M;
    if(d<2||d>16)
    {
        s[0]='\0';  /* 不合理的进制,置s为空字符串 */
        return 0;   /* 不合理的进制,函数返回0 */
    }
    buf[i]='\0';
    do
    {
        buf[--i]=digits[n%d];   /*译出最低位,对应字符存入对应工作数组中*/
        n/=d;
    }while(n);
    /* 将译出在工作数组中的字符串复制到s */
    for(j=0;(s[j]=buf[i])!='\0';j++,i++);
        /* 其中控制条件可简写成s[j]=buf[i] */
    return j;
}
/* 主函数用于测试函数 trans() */
main()
{
    unsigned int num = 253;
    int scale[]={2,3,10,16,1};
    char str[33];
    int i;
    clrscr();
    for(i=0;i<sizeof(scale)/sizeof(scale[0]);i++)
    {
        if(trans(num,scale[i],str))
            printf("%5d = %s(%d)\n",num,str,scale[i]);
        else
            printf("%5d => (%d) Error! \n",num,scale[i]);
    }
    printf("\n Press any key to quit...\n");
    getch();
}
目录
相关文章
|
8月前
|
存储 C语言
C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句
C语言实现十进制转化为十六进制-------数组,switch语句,while循环语句
137 0
|
C语言
C语言之将十进制整数转换为任意进制整数
C语言之将十进制整数转换为任意进制整数
246 0
|
C语言
C语言之十进制转化为十六进制
C语言之十进制转化为十六进制
179 0
|
1月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
44 5
|
3月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
230 1
|
4月前
|
存储 C语言
【C语言基础考研向】04整型进制转换
本文介绍了计算机中整型常量的不同进制表示,包括二进制、八进制、十六进制和十进制,并解释了它们之间的转换方法。以一个32位整型数为例,展示了其在不同进制下的表示形式及计算方法,特别指出在内存观察中常用十六进制,同时提到了小端存储方式对数据的影响。
|
6月前
|
存储 C语言
C语言18---常用的进制
C语言18---常用的进制
|
8月前
|
C语言
每天一道C语言编程(2^k进制数)
每天一道C语言编程(2^k进制数)
37 0
|
8月前
|
存储 编译器 C语言
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)
|
8月前
|
C语言
C语言进制转换
C语言进制转换