Generally, if you want to convert PHP string type numbers into integer numbers, we will use the system’s built-in API to do the conversion. However, the following article mainly introduces to you how PHP does not use built-in functions to implement strings. The example of the method of converting to integer type is introduced in very detail in the article. Friends who need it can refer to it. Let's take a look together.
Introduction
If you want to convert PHP string type numbers into integer numbers, generally we use the system’s built-in API to do so. Do conversion, but what if we are not allowed to use the system's built-in API conversion, but are allowed to implement a function conversion ourselves? Here we look at how to achieve it.
System built-in API method
$num = '345432123'; //(一) $num = (int)$num; //输出: //int(345432123) //(二) $num = intval($num); //输出: //int(345432123)
Using ASCII code
Next we use ascii code to convert, because each character corresponds to an ascii code, when adding, subtracting, multiplying and dividing this character , in fact, it is to perform addition, subtraction, multiplication and division operations on ascii codes, that is, integer operations, which will eventually return an integer number.
-Picture transferred from the Internet-
You can see from the picture above that the ASCII codes of characters '0' ~ '9' are 48 ~ 57. When converting, we subtract '0' from each character. For example: '1' - '0' = 1 , '2' - '0' = 2 The return value is an Int type. Please see the code implementation below.
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)
A string is also provided in Redis The function of converting to integer type is also done through ASCII code. The implementation is relatively complete and rigorous. For details, please refer to
string2ll function
#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; }
Related recommendations:
##sql CONVERT() string Convert to integer type Date character type
Convert to integer TypeMethod
##
The above is the detailed content of Detailed explanation of how to convert string to integer in PHP without using built-in functions. For more information, please follow other related articles on the PHP Chinese website!