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新手上路(十二)
Oct 09 PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 PHP
php的hash算法介绍
Feb 13 PHP
php 使用GD库为页面增加水印示例代码
Mar 24 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
php导入模块文件分享
Mar 17 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
Dec 28 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
php微信公众平台交互与接口详解
Nov 28 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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
PHP字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
layui实现table加载的示例代码
2018/08/14 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
Python实现多线程抓取妹子图
2015/08/08 Python
分享python数据统计的一些小技巧
2016/07/21 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python实现类之间的方法互相调用
2018/04/29 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
python对文件的操作方法汇总
2020/02/28 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python 爬虫性能相关总结
2020/08/03 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
直接有效的自我评价
2014/01/11 职场文书
出纳岗位职责
2015/01/31 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android