gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP不使用内置函数实现字符串转整型的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

介绍 。

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

系统内置 API 方式 。

?
1
2
3
4
5
6
7
8
9
10
11
$num = '345432123' ;
 
  //(一)
$num = (int) $num ;
//输出:
//int(345432123)
 
//(二)
$num = intval ( $num );
//输出:
//int(345432123)

采用 ASCII 码方式 。

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

-图片转自网络- 。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 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;
}

总结 。

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

原文链接:http://www.jianshu.com/p/9bc72757a6e8 。

最后此篇关于PHP不使用内置函数实现字符串转整型的方法示例的文章就讲到这里了,如果你想了解更多关于PHP不使用内置函数实现字符串转整型的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com