久久久久在线观看_又色又爽又黄的免费视频播放_一区中文字幕_日韩电影在线播放

今日頭條 焦點(diǎn)資訊 營銷之道 企業(yè)報(bào)道 淘寶運(yùn)營 網(wǎng)站建設(shè) 軟件開發(fā) 400電話
  當(dāng)前位置: 首頁 » 資訊 » 軟件開發(fā) » 正文

PHP實(shí)現(xiàn)不使用內(nèi)置函數(shù)實(shí)現(xiàn)字符串轉(zhuǎn)整型方法

放大字體  縮小字體 發(fā)布日期:2018-02-10  來源:企業(yè)800網(wǎng)  作者:新格網(wǎng)  瀏覽次數(shù):877  【去百度看看】
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>


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;

 
 if (slen == 1 && p[0] == '0') {
  if (value != NULL) *value = 0;
  return 1;
 }

 if (p[0] == '-') {
  negative = 1;
  p++; plen++;

  
  if (plen == slen)
   return 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)) 
   return 0;
  v *= 10;

  if (v > (ULLONG_MAX - (p[0]-'0'))) 
   return 0;
  v += p[0]-'0';

  p++; plen++;
 }

 
 if (plen < slen)
  return 0;

 if (negative) {
  if (v > ((unsigned long long)(-(LLONG_MIN+1))+1)) 
   return 0;
  if (value != NULL) *value = -v;
 } else {
  if (v > LLONG_MAX) 
   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;
}

相關(guān)推薦:

sql ConVERT() 字符串轉(zhuǎn)整型 日期 字符型

以上就是PHP實(shí)現(xiàn)不使用內(nèi)置函數(shù)實(shí)現(xiàn)字符串轉(zhuǎn)整型方法的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

 
關(guān)鍵詞: php,函數(shù),內(nèi)置
 
[ 資訊搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 違規(guī)舉報(bào) ]  [ 關(guān)閉窗口 ]

 
0條 [查看全部]  相關(guān)評論

 
網(wǎng)站首頁 | 關(guān)于我們 | 聯(lián)系方式 | 使用協(xié)議 | 版權(quán)隱私 | 網(wǎng)站地圖 | 排名推廣 | 廣告服務(wù) | 積分換禮 | 網(wǎng)站留言 | RSS訂閱 | 吉ICP備11001726號-6
企業(yè)800網(wǎng) · 提供技術(shù)支持