簡介:
創(chuàng)新互聯(lián)主營建始網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),建始h5微信平臺小程序開發(fā)搭建,建始網(wǎng)站營銷推廣歡迎建始等地區(qū)企業(yè)咨詢
atoi: 是ASCII to integer 的縮寫,是把字符串轉(zhuǎn)換成整型數(shù)的一種函數(shù)
atol: 是ASCII to long 的縮寫,是把字符串轉(zhuǎn)換成長長整型數(shù)的一種函數(shù)
atoll: 是ASCII to long long 的縮寫,是把字符串轉(zhuǎn)換成長長整型數(shù)的一種函數(shù)
atoq: 是一種廢棄的atoll版本, 功能與atoll相似, 因?yàn)橐呀?jīng)廢棄, 本次不參與代碼實(shí)現(xiàn)
代碼實(shí)現(xiàn):
aoti
#include/* * 自己動(dòng)用實(shí)現(xiàn)atoi * 功能: 將數(shù)字字符串轉(zhuǎn)換成×××并返回 * author sea time 2016/06/15 */ int myatoi(const char* pstr){ //判斷指針是否為空 if(NULL == pstr){ return -1; } //接收指針值, 不改變形參值 const char* p = pstr; //保存結(jié)束, 并返回 int retval = 0; //符號, 正數(shù)為1, 負(fù)數(shù)為0 int sign = 1; //跳過前面的空格 while(' ' == *p){ p++; } //判斷正負(fù)號 if('-' == *p){ sign = -1; } //如果是符號, 指針后移 if('-' == *p || '+' == *p){ p++; } // while('0' <= *p && '9' >= *p){ //字符0在ascii碼中對應(yīng)的是48, 所以需要減字符0 //上一次的值乘10, 并加上本次的值 retval = retval * 10 + ((int)(*p)- '0'); //指針后移 p++; } //返回結(jié)果 return retval * sign; } int main(int argc, char* argv[]){ //測試結(jié)果 char* p = "-123151"; //打印輸出 printf("%s = %d\n", p, myatoi(p)); return 0; }
由于aoti只能實(shí)現(xiàn)結(jié)果,int32 范圍是: 2147483647 ~ -2147483648, 超出范圍會(huì)進(jìn)行溢出運(yùn)算
atol:
#include/* * 自己動(dòng)用實(shí)現(xiàn)atol * 功能: 將數(shù)字字符串轉(zhuǎn)換成長×××并返回 * author sea time 2016/06/15 */ long myatol(const char* pstr){ //判斷指針是否為空 if(NULL == pstr){ return -1; } //接收指針值, 不改變形參值 const char* p = pstr; //保存結(jié)束, 并返回 long retval = 0; //符號, 正數(shù)為1, 負(fù)數(shù)為0 int sign = 1; //跳過前面的空格 while(' ' == *p){ p++; } //判斷正負(fù)號 if('-' == *p){ sign = -1; } //如果是符號, 指針后移 if('-' == *p || '+' == *p){ p++; } // while('0' <= *p && '9' >= *p){ //字符0在ascii碼中對應(yīng)的是48, 所以需要減于字符0 //上一次的值乘10, 并加上本次的值 retval = retval * 10 + ((int)(*p)- 48); //指針后移 p++; } //返回結(jié)果 return retval * sign; } int main(int argc, char* argv[]){ //測試結(jié)果 char* p = "-142222234152654151"; //打印輸出結(jié)果 printf("%s = %ld\n", p, myatol(p)); return 0; }
atol的范圍-9223372036854775808到9223372036854775807 超出范圍會(huì)進(jìn)行溢出運(yùn)算
atoll:
#include/* * 自己動(dòng)用實(shí)現(xiàn)atoll * 功能: 將數(shù)字字符串轉(zhuǎn)換成長長×××并返回 * author sea time 2016/06/15 */ long long myatoll(const char* pstr){ //判斷指針是否為空 if(NULL == pstr){ return -1; } //接收指針值, 不改變形參值 const char* p = pstr; //保存結(jié)束, 并返回 long long retval = 0; //符號, 正數(shù)為1, 負(fù)數(shù)為0 int sign = 1; //跳過前面的空格 while(' ' == *p){ p++; } //判斷正負(fù)號 if('-' == *p){ sign = -1; } //如果是符號, 指針后移 if('-' == *p || '+' == *p){ p++; } // while('0' <= *p && '9' >= *p){ //字符0在ascii碼中對應(yīng)的是48, 所以需要減于字符0 //上一次的值乘10, 并加上本次的值 retval = retval * 10 + ((int)(*p)- 48); //指針后移 p++; } //返回結(jié)果 return retval * sign; } int main(int argc, char* argv[]){ //測試結(jié)果 char* p = "-922337203685477580888"; printf("%s = %lld\n", p, myatoll(p)); return 0; }