zoukankan      html  css  js  c++  java
  • 进制转换

    本文参考:http://www.cnblogs.com/applebunny/archive/2012/06/21/2557361.html

    先看下itoa()的函数说明:

    功能:把一整数转换为字符串

    用法:char *itoa(int value, char *string, int radix);

    详细解释:itoa是integer to array(将int整型转化为一个字符串,并将值保存在数组string中)的缩写。

    参数:value :待转化的整数。

            radix:是基数的意思,即将value转化为radix进制的数,范围介于2-36,比如10表示10进制,16表示16进制。

            *string:保存转换后得到的字符串。

    返回值:char *:指向生成的字符串,同*string。

    备注:该函数的头文件是“stdlib.h”(包含在iostream里面)

    记住一点:itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。 
    是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似。

    Example

    /* sprintf example */
    #include <stdio.h>
    
    int main ()
    {
      char buffer [50];
      int a=5;
      n=sprintf (buffer, "%d  %o  %x", a, a, a);
      printf ("[%s] is a string \n",buffer);
      return 0;
    }

    备注:atoi()是标准库里面的函数,在C/C++语言参考函数里面有,而itoa()却没有,对此我们最好自己实现itoa()函数。

    虽然可能itoa无法使用,但是我们可以编写自己的itoa()函数,以下是实现源代码:(对原文代码进行了改进)

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    void itoa0(int num,char *str,int radix)
    {
        const char a[]="0123456789abcdefghijklmnopqrstuvwxyz"; // 36个字母, 最多支持36进制
        char ptr[200];
        int len=0;
        unsigned int uNum;
        if (num==0)
        {
            *str++='0';
            *str='\0';
            return;
        }
        else if (num<0)
        {
            if(radix == 2) // 负数的二进制 显示其补码
                uNum = (unsigned int) num;
            else
            {
                *str++='-';
                num *=-1;//绝对值
                uNum = num;
            }
        }
        while (uNum!=0)
        {
            ptr[len++]=a[uNum%radix];
            uNum/=radix;
        }
        for (int i=len-1;i>=0;--i)
        {
            *str++=ptr[i];
        }
        *str='\0';
    }
    
    void main()
    {
        char result[200];
        int num =-4;
        string str;
        itoa0(num,result,2);
        cout<<result<<endl;
        system("pause");
    }
  • 相关阅读:
    第六周总结
    石家庄地铁线路查询系统
    第五周总结报告
    二维数组
    第四周总结
    个人作业一(补充)
    第三周总结
    个人作业一
    开课博客
    CentOS7 网卡配置文件解释
  • 原文地址:https://www.cnblogs.com/wenshanzh/p/2559668.html
Copyright © 2011-2022 走看看