PHP不使用內(nèi)置函數(shù)實(shí)現(xiàn)字符串轉(zhuǎn)整型的方法示例
介紹
php字符串類型的數(shù)字如果想轉(zhuǎn)成整型的數(shù)字,一般我們都是采用系統(tǒng)內(nèi)置的API去做轉(zhuǎn)換,但如果規(guī)定就不讓我們?nèi)ビ孟到y(tǒng)內(nèi)置的API轉(zhuǎn)換,而是讓自己去實(shí)現(xiàn)一個(gè)函數(shù)轉(zhuǎn)換該怎么辦?這里我們看下如何去實(shí)現(xiàn)。
系統(tǒng)內(nèi)置 API 方式
$num = '345432123'; //(一) $num = (int)$num; //輸出: //int(345432123) //(二) $num = intval($num); //輸出: //int(345432123)
采用 ASCII 碼方式
下面我們利用 ascii 碼的方式去做轉(zhuǎn)換,因?yàn)槊總€(gè)字符都對應(yīng)一個(gè) ascii 碼,當(dāng)對這個(gè)字符做加減乘除的時(shí)候,實(shí)際上就是對 ascii 碼做加減乘除操作,也就是整型操作,最終會返回一個(gè)整型數(shù)字.

-圖片轉(zhuǎn)自網(wǎng)絡(luò)-
通過上圖可以看到字符 '0' ~ '9' 的 ascii 碼是 48~57 我們在轉(zhuǎn)換的時(shí)候就是用每一個(gè)字符減去 '0' 例如: '1' - '0' = 1、'2' - '0' = 2 返回值就是一個(gè)Int類型,下面具體看代碼實(shí)現(xiàn).
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 里面也有提供一個(gè)字符串轉(zhuǎn)整型的函數(shù),也是通過ascii碼方式去做的,實(shí)現(xiàn)的比較完善嚴(yán)謹(jǐn),具體可以參考下
string2ll 函數(shù)
#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;
}
//-------- 執(zhí)行 ---------
int main(){
long long num;
string2ll("345432123",strlen("345432123"),&num);
printf("%d\n",num); //輸出 345432123
retunr 0;
}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- MySQL模糊查詢用法大全(正則、通配符、內(nèi)置函數(shù))
- 自學(xué)MySql內(nèi)置函數(shù)知識點(diǎn)總結(jié)
- MySQL高效模糊搜索之內(nèi)置函數(shù)locate instr position find_in_set使用詳解
- PHP內(nèi)置函數(shù)生成隨機(jī)數(shù)實(shí)例
- PHP使用內(nèi)置函數(shù)生成圖片的方法詳解
- 幾個(gè)實(shí)用的PHP內(nèi)置函數(shù)使用指南
- PHP通過內(nèi)置函數(shù)memory_get_usage()獲取內(nèi)存使用情況
- MySQL與PHP的基礎(chǔ)與應(yīng)用專題之內(nèi)置函數(shù)
相關(guān)文章
WordPress中Gravatar頭像緩存到本地及相關(guān)優(yōu)化的技巧
這篇文章主要介紹了WordPress中Gravatar頭像緩存到本地及優(yōu)化的技巧,需要的朋友可以參考下2015-12-12
PHP正則替換函數(shù)preg_replace()報(bào)錯(cuò):Notice Use of undefined constant的解
這篇文章主要介紹了PHP正則替換函數(shù)preg_replace()報(bào)錯(cuò):Notice Use of undefined constant的解決方法,結(jié)合具體實(shí)例形式分析了preg_replace()報(bào)錯(cuò)的原因與相關(guān)解決技巧,需要的朋友可以參考下2017-02-02
php通過ajax實(shí)現(xiàn)雙擊table修改內(nèi)容
這篇文章主要介紹了php通過如何ajax實(shí)現(xiàn)雙擊table修改內(nèi),需要的朋友可以參考下2014-04-04
Php連接及讀取和寫入mysql數(shù)據(jù)庫的常用代碼
既然現(xiàn)在你看到了這篇文章,說明你肯定知道PHP和MySQL是怎么一回事,我就不啰嗦了。但為什么你還要繼續(xù)閱讀此文呢?可能是以前你習(xí)慣復(fù)制粘貼一些代碼,并沒有真正弄懂代碼的含義;也可能你以前弄懂了,但像我一樣,有一段時(shí)間沒有接觸,生疏了2014-08-08
PHP utf-8編碼問題,utf8編碼,數(shù)據(jù)庫亂碼,頁面顯示輸出亂碼
老聲長談,著是困惑很多人的問題,如果處理不好,都是亂碼,說這些話并不是我對編碼很精通,只是在這方面是得留神,自己總結(jié)了一點(diǎn)小經(jīng)驗(yàn)2013-04-04
php中刪除數(shù)組的第一個(gè)元素和最后一個(gè)元素的函數(shù)
這篇文章主要介紹了php中刪除數(shù)組的第一個(gè)元素和最后一個(gè)元素的函數(shù),需要的朋友可以參考下2015-03-03
PHP實(shí)現(xiàn)鏈?zhǔn)讲僮鞯娜N方法詳解
這篇文章主要介紹了PHP實(shí)現(xiàn)鏈?zhǔn)讲僮鞯娜N方法,結(jié)合實(shí)例形式分析了php鏈?zhǔn)讲僮鞯南嚓P(guān)實(shí)現(xiàn)技巧與使用注意事項(xiàng),需要的朋友可以參考下2017-11-11

