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 相关文章推荐
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 PHP
PHP中使用CURL模拟登录并获取数据实例
Jul 01 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 PHP
smarty高级特性之对象的使用方法
Dec 25 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
php实现的简单数据库操作Model类
Nov 16 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 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
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
php数组添加元素方法小结
2014/12/20 PHP
Symfony的安装和配置方法
2016/03/17 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
PyCharm 常用快捷键和设置方法
2017/12/20 Python
Python中的默认参数实例分析
2018/01/29 Python
Django中Model的使用方法教程
2018/03/07 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
Python中创建二维数组
2018/10/17 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
Python玩转Excel的读写改实例
2019/02/22 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
前台文员岗位职责及工作流程
2013/11/19 职场文书
关于逃课的检讨书
2014/01/23 职场文书
美术指导助理求职信
2014/04/20 职场文书
2014年班组长工作总结
2014/11/20 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python