手机版

PHP不使用内置函数实现字符串到整数的转换方法

时间:2021-09-04 来源:互联网 编辑:宝哥软件园 浏览:

介绍

如果php字符串类型的数字想要转换成整数,我们通常使用系统的内置API进行转换,但是如果有规定,我们就不会使用系统的内置API进行转换,而是让自己实现一个函数转换。这里我们看看如何实现它。

系统内置API模式

$ num=' 345432123//(1)$ num=(int)$ num;//输出://int(345432123)//(2)$ num=int val($ num);//输出://int(345432123)采用ASCII码

接下来,我们使用ascii码进行转换,因为每个字符对应一个ascii码。在加、减、乘、除这个字符的时候,其实是一个ascii码的加、减、乘、除的运算,也就是一个整数运算,最终会返回一个整数。

-从网上传来的图片-

从上图可以看出,字符‘0’~‘9’的ascii码为48~57。当我们转换时,我们从每个字符中减去“0”。例如,“1”-“0”=1,“2”-“0”=2。返回值是一个整型。请参见下面的代码实现。

function convert($ StrInt=' '){ $ len=strlen($ StrInt);$ int=0;for($ I=0;$ i $ len$ I){ $ int *=10;$ num=$ StrInt { $ I }-' 0 ';$ int=$ num}返回$ int} $ num=' 345432123var _ dump(convert($ num));//输出:int(345432123)还提供了在Redis中将字符串转换为整数的功能,这也是通过ascii码完成的。执行相对完善和严谨。详情请参考以下内容

String2ll函数

# include stdio . h # include limits . h # include string . h/*将字符串转换为长整型。如果字符串可以被解析*为(非溢出)长,则返回1,否则返回0。适当时,该值将被设置为*解析后的值。*/int string2ll(const char *s,size_t slen,long long * value){ const char * p=s;size _ t plen=0;int负值=0;无符号长长v;if (plen==slen)返回0;/*特殊情况:第一个也是唯一一个数字是0。*/if(slen==1p[0]==' 0 '){ if(value!=空)*值=0;返回1;} if(p[0]=='-'){ negative=1;p;plen/*仅在出现负号时中止。*/if (plen==slen)返回0;} /*第一个数字应该是1-9,否则字符串应该只是0。*/if(p[0]=' 1 ' p[0]=' 9 '){ v=p[0]-' 0 ';p;plen} else if(p[0]==' 0 ' slen==1){ * value=0;返回1;} else { return 0;} while(plen slen p[0]=' 0 ' p[0]=' 9 '){ if(v(ULLONG _ MAX/10))/* Overflow。*/返回0;v *=10if(v(ULLONG _ MAX-(p[0]-' 0 '))/* Overflow。*/返回0;v=p[0]-' 0 ';p;plen} /*如果未使用所有字节,则返回。*/if (plen slen)返回0;if(负){ if (v)((无符号长long)(-(LLONG_MIN 1)) 1)) /*溢出。*/返回0;if(值!=NULL)*值=-v;} else { if (v LLONG_MAX) /* Overflow。*/返回0;if(值!=NULL)*值=v;}返回1;}///-execute-int main(){ long long num;string all(' 345432123 ',strlen('345432123 '),num);printf('%d\n ',num);//输出345432123retrn0}摘要

以上就是本文的全部内容。希望这篇文章的内容对你的学习或工作有所帮助。有问题可以留言交流。谢谢你的支持。

版权声明:PHP不使用内置函数实现字符串到整数的转换方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。