自己实现itoa(),10进制到2~36进制的转换
2012-06-21 10:33
585 查看
先看下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类似。
备注:atoi()是标准库里面的函数,在C/C++语言参考函数里面有,而itoa()却没有,对此我们最好自己实现itoa()函数。
虽然可能itoa无法使用,但是我们可以编写自己的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类似。
备注:atoi()是标准库里面的函数,在C/C++语言参考函数里面有,而itoa()却没有,对此我们最好自己实现itoa()函数。
虽然可能itoa无法使用,但是我们可以编写自己的itoa()函数,以下是实现源代码:
//n是要被转换的十进制数,bit是要被转换的进制数 #include <iostream> #include <string> using namespace std; char * Ten_to_other(int num,char* str, int radix) { const char a[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char *ptr=str; bool negtive = false; if(num==0) { *ptr++=0; *ptr='\0'; return NULL;//直接就退出,不走后面的情况了,不跟后面共用一个return语句。 } if(num<0) { num *= -1; *ptr++ ='-'; negtive = true; } while(num) //不能处理num=0的情况 { *ptr++=a[num%radix]; num /= radix; } *ptr='\0';//此时ptr已经指向字符串结尾,而str仍旧指向字符串开始。 ptr--;//让ptr指向字符串内容!! char *start=(negtive)? str+1:str;//注意此处不能写str++,否则,str不指向保存值的首地址了 while(start<ptr) { char tmp=*ptr; *ptr=*start; *start=tmp; ptr--; start++; /*char tmp=*ptr--;//这样写ptr,str都加了那么多遍,肯定错了啊!!! *ptr--=*str++; *str++=tmp;*/ } /*int len=strlen(str); int i = (negtive)? 1:0; for(i; i<len/2; ++i) //当为负数时候,str字符串最后的字符不能用len-1-i了,因为此时i=1而不是0 { char tmp = str[i]; str[i]=str[len-1-i]; str[len-1-i]=tmp; } */ return NULL; } int main() { char a[12]={0}; Ten_to_other(-82,a,6); cout<<a<<endl; system("pause"); return 0; }
相关文章推荐
- java学习3-查表法实现10进制转换为16进制
- 【原】VC++ 中实现进制2进制,10进制,16进制的相互转换
- js实现26进制和10进制之间的转换
- VC++ 中实现进制2进制,10进制,16进制的相互转换
- 自己实现10进制转2进制和16进制
- 递归:多种方法实现进制转换,实现系统原函数_itoa()
- 进制数转换器的VB算法实现(2/8/10/16进制数可以相互转换)
- 14.2线性表之STL实现10进制向任意进制的转换
- VC++ 中实现进制2进制,10进制,16进制的相互转换
- c语言用栈实现10进制转换为8进制
- 编程实现36进制和10进制之间的相互转换
- 链栈实现10进制转换2进制
- 自己实现的62进制转10进制互转
- itoa()函数,10进制转换到(2~36)进制
- itoa()函数,10进制转换到(2~36)进制
- java实现10进制转换为英文字符表示的26进制,得到唯一自增的英文字符串序列。
- C语言自己实现的 整形转换成字符串函数itoa(int Number,char* Str)
- c语言位域实现10进制转换成2进制
- 36进制与10进制之间的转换