PHP-字符串轉整型-不使用內置函數(shù)

字符串轉整型-不使用內置函數(shù)

介紹

php字符串類型的數(shù)字如果想轉成整型的數(shù)字,一般我們都是采用系統(tǒng)內置的API去做轉換躲查,但如果規(guī)定就不讓我們去用系統(tǒng)內置的API轉換它浅,而是讓自己去實現(xiàn)一個函數(shù)轉換該怎么辦镣煮?這里我們看下如何去實現(xiàn)姐霍。

系統(tǒng)內置 API 方式

$num = '345432123';
    
 //(一)
$num = (int)$num;
//輸出:
//int(345432123)

//(二)
$num = intval($num);
//輸出:
//int(345432123)

采用 ASCII 碼方式

下面我們利用 ascii 碼的方式去做轉換,因為每個字符都對應一個 ascii 碼典唇,當對這個字符做加減乘除的時候镊折,實際上就是對 ascii 碼做加減乘除操作,也就是整型操作介衔,最終會返回一個整型數(shù)字.

-圖片轉自網(wǎng)絡-

通過上圖可以看到字符 '0' ~ '9' 的 ascii 碼是 48~57 我們在轉換的時候就是用每一個字符減去 '0' 例如: '1' - '0' = 1恨胚、'2' - '0' = 2 返回值就是一個Int類型,下面具體看代碼實現(xiàn).

function convertInt($strInt = ''){ 
    $len = strlen($strInt);  
    $int = 0;
        
    for($i=0;$i<$len;$i++){
        $int *= 10;         
        $num = ord($strInt{$i}) - ord('0');         
        $int += $num;       
    }
                
    return $int;        
}

 $num = '345432123';    
 var_dump(convertInt($num)); //輸出: int(345432123)


在 Redis 里面也有提供一個字符串轉整型的函數(shù)炎咖,也是通過ascii碼方式去做的赃泡,實現(xià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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
禁止轉載塘装,如需轉載請通過簡信或評論聯(lián)系作者急迂。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹦肴,隨后出現(xiàn)的幾起案子僚碎,更是在濱河造成了極大的恐慌,老刑警劉巖阴幌,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勺阐,死亡現(xiàn)場離奇詭異,居然都是意外死亡矛双,警方通過查閱死者的電腦和手機渊抽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來议忽,“玉大人懒闷,你說我怎么就攤上這事。” “怎么了愤估?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵帮辟,是天一觀的道長。 經(jīng)常有香客問我玩焰,道長由驹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任昔园,我火速辦了婚禮蔓榄,結果婚禮上,老公的妹妹穿的比我還像新娘默刚。我一直安慰自己甥郑,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布羡棵。 她就那樣靜靜地躺著壹若,像睡著了一般。 火紅的嫁衣襯著肌膚如雪皂冰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天养篓,我揣著相機與錄音秃流,去河邊找鬼。 笑死柳弄,一個胖子當著我的面吹牛舶胀,可吹牛的內容都是我干的。 我是一名探鬼主播碧注,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嚣伐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了萍丐?” 一聲冷哼從身側響起轩端,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逝变,沒想到半個月后基茵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡壳影,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年拱层,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宴咧。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡根灯,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情烙肺,我是刑警寧澤芥驳,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站茬高,受9級特大地震影響兆旬,放射性物質發(fā)生泄漏。R本人自食惡果不足惜怎栽,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一丽猬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熏瞄,春花似錦脚祟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至邮丰,卻和暖如春行您,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剪廉。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工娃循, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斗蒋。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓捌斧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泉沾。 傳聞我的和親對象是個殘疾皇子捞蚂,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容

  • 1、標識符 什么事標識符呢跷究?變量的名字就是標識符姓迅。不僅限于變量名,程序中各種元素的名字揭朝,都屬于標識符队贱。例如符號常量...
    滕王閣序閱讀 924評論 0 0
  • 內置函數(shù)Python解釋器內置了許多功能和類型,總是可用的。他們是按字母順序列在這里潭袱。 abs(x)返回一個數(shù)的絕...
    uangianlap閱讀 1,239評論 0 0
  • 1. Java基礎部分 基礎部分的順序:基本語法柱嫌,類相關的語法,內部類的語法屯换,繼承相關的語法编丘,異常的語法与学,線程的語...
    子非魚_t_閱讀 31,632評論 18 399
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,234評論 0 4
  • “脆弱的人心難免要有些合法的娛樂,若不是聽說過愛情多少人見過愛情嘉抓∷魇兀” 邁步的時候 大地在徜徉 叫停的時候 枝頭爬滿...
    水檻閱讀 168評論 2 6