itoa()函数,10进制转换到(2~36)进制

2024-09-07 19:18
文章标签 36 函数 转换 进制 itoa

本文主要是介绍itoa()函数,10进制转换到(2~36)进制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先看下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类似。

 

 虽然可能itoa无法使用,但是我们可以编写自己的itoa()函数,以下是实现源代码(来源网络):

[cpp] view plain copy print ?
  1. char*my_itoa(int num,char*str,int radix)  
  2. {  
  3.     const char table[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;  
  4.     char*ptr=str ;  
  5.     bool negative=false ;  
  6.     if(num==0)  
  7.     {  
  8.         //num=0   
  9.         *ptr++='0' ;  
  10.         *ptr='/0' ;  
  11.         // don`t forget the end of the string is '/0'!!!!!!!!!   
  12.         return str ;  
  13.     }  
  14.     if(num<0)  
  15.     {  
  16.         //if num is negative ,the add '-'and change num to positive   
  17.         *ptr++='-' ;  
  18.         num*=-1 ;  
  19.         negative=true ;  
  20.     }  
  21.     while(num)  
  22.     {  
  23.         *ptr++=table[num%radix];  
  24.         num/=radix ;  
  25.     }  
  26.     *ptr='/0' ;  
  27.     //if num is negative ,the add '-'and change num to positive   
  28.     // in the below, we have to converse the string   
  29.     char*start=(negative?str+1:str);  
  30.     //now start points the head of the string   
  31.     ptr--;  
  32.     //now prt points the end of the string   
  33.     while(start<ptr)  
  34.     {  
  35.         char temp=*start ;  
  36.         *start=*ptr ;  
  37.         *ptr=temp ;  
  38.         start++;  
  39.         ptr--;  
  40.     }  
  41.     return str ;  
  42. }  

 

程序的测试如下:

[cpp] view plain copy print ?
  1. #include <iostream>   
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     int a=15;  
  6.     char str[100];  
  7.     my_itoa(a,str,15);  
  8.     cout<<str<<endl;  
  9.     return 0;  
  10. }  

 

对于已经转换到指定进制的数,此时是字符串,我们可以再转换为整型(2~10进制才可以),比如:

[cpp] view plain copy print ?
  1. int main()  
  2. {  
  3.     int a=15;  
  4.     char str[100];  
  5.     int n=atoi(my_itoa(a,str,2));  
  6.     cout<<n<<endl;  
  7.     return 0;  
  8. }  

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

这篇关于itoa()函数,10进制转换到(2~36)进制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145928

相关文章

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一