PHP不使用内置函数实现字符串转整型的方法示例


Posted in PHP onJuly 03, 2017

介绍

php字符串类型的数字如果想转成整型的数字,一般我们都是采用系统内置的API去做转换,但如果规定就不让我们去用系统内置的API转换,而是让自己去实现一个函数转换该怎么办?这里我们看下如何去实现。

系统内置 API 方式

$num = '345432123';

 //(一)
$num = (int)$num;
//输出:
//int(345432123)

//(二)
$num = intval($num);
//输出:
//int(345432123)

采用 ASCII 码方式

下面我们利用 ascii 码的方式去做转换,因为每个字符都对应一个 ascii 码,当对这个字符做加减乘除的时候,实际上就是对 ascii 码做加减乘除操作,也就是整型操作,最终会返回一个整型数字.

PHP不使用内置函数实现字符串转整型的方法示例
-图片转自网络-

通过上图可以看到字符 '0' ~ '9' 的 ascii 码是 48~57 我们在转换的时候就是用每一个字符减去 '0' 例如: '1' - '0' = 1、'2' - '0' = 2 返回值就是一个Int类型,下面具体看代码实现.

function convertInt($strInt = ''){ 
 $len = strlen($strInt); 
 $int = 0;

 for($i=0;$i<$len;$i++){
  $int *= 10;   
  $num = $strInt{$i} - '0';   
  $int += $num;  
 }

 return $int;  
}

 $num = '345432123'; 
 var_dump(convertInt($num)); //输出: int(345432123)

在 Redis 里面也有提供一个字符串转整型的函数,也是通过ascii码方式去做的,实现的比较完善严谨,具体可以参考下

string2ll 函数

#include <stdio.h>
#include <limits.h>
#include <string.h>

/* Convert a string into a long long. Returns 1 if the string could be parsed
 * into a (non-overflowing) long long, 0 otherwise. The value will be set to
 * the parsed value when appropriate. */
int string2ll(const char *s, size_t slen, long long *value) {
 const char *p = s;
 size_t plen = 0;
 int negative = 0;
 unsigned long long v;

 if (plen == slen)
  return 0;

 /* Special case: first and only digit is 0. */
 if (slen == 1 && p[0] == '0') {
  if (value != NULL) *value = 0;
  return 1;
 }

 if (p[0] == '-') {
  negative = 1;
  p++; plen++;

  /* Abort on only a negative sign. */
  if (plen == slen)
   return 0;
 }

 /* First digit should be 1-9, otherwise the string should just be 0. */
 if (p[0] >= '1' && p[0] <= '9') {
  v = p[0]-'0';
  p++; plen++;
 } else if (p[0] == '0' && slen == 1) {
  *value = 0;
  return 1;
 } else {
  return 0;
 }

 while (plen < slen && p[0] >= '0' && p[0] <= '9') {
  if (v > (ULLONG_MAX / 10)) /* Overflow. */
   return 0;
  v *= 10;

  if (v > (ULLONG_MAX - (p[0]-'0'))) /* Overflow. */
   return 0;
  v += p[0]-'0';

  p++; plen++;
 }

 /* Return if not all bytes were used. */
 if (plen < slen)
  return 0;

 if (negative) {
  if (v > ((unsigned long long)(-(LLONG_MIN+1))+1)) /* Overflow. */
   return 0;
  if (value != NULL) *value = -v;
 } else {
  if (v > LLONG_MAX) /* Overflow. */
   return 0;
  if (value != NULL) *value = v;
 }
 return 1;
}

//-------- 执行 ---------
int main(){
 long long num;
 string2ll("345432123",strlen("345432123"),&num);
 printf("%d\n",num); //输出 345432123
 retunr 0;
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
介绍php设计模式中的工厂模式
Jun 12 PHP
php5 图片验证码实现代码
Dec 11 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
Yii2表单事件之Ajax提交实现方法
May 04 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
php实例化一个类的具体方法
Sep 19 PHP
Laravel 自定命令以及生成文件的例子
Oct 23 PHP
PHP获取类私有属性的3种方法
Sep 10 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 #PHP
使用Zttp简化Guzzle 调用
Jul 02 #PHP
详解php几行代码实现CSV格式文件输出
Jul 01 #PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 #PHP
详解如何在云服务器上部署Laravel
Jun 30 #PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 #PHP
ThinkPHP实现登录退出功能
Jun 29 #PHP
You might like
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
php生成curl命令行的方法
2015/12/14 PHP
yii用户注册表单验证实例
2015/12/26 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
Python生成随机密码
2015/03/10 Python
简单介绍Ruby中的CGI编程
2015/04/10 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
详解Python学习之安装pandas
2019/04/16 Python
python 随机森林算法及其优化详解
2019/07/11 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
Python count函数使用方法实例解析
2020/03/23 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
pycharm导入源码的具体步骤
2020/08/04 Python
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
市场部规章制度
2014/01/24 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
信仰纪录片观后感
2015/06/08 职场文书
图书借阅制度范本
2015/08/06 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
Mysql忘记密码解决方法
2022/02/12 MySQL
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android