前段時(shí)間被人問到有沒有了解過c#里一些內(nèi)部方法的實(shí)現(xiàn)機(jī)制豌拙,雖然大概知道陕悬,但是沒有去深入了解。又被問到怎么自己實(shí)現(xiàn)一個(gè)string轉(zhuǎn)int按傅。在這里給大家講一下我的實(shí)現(xiàn)思路捉超。
首先我們要先把字符拆分成單個(gè)char類型,
char[] chars = str.ToCharArray();
然后我們再用數(shù)學(xué)計(jì)算得到最終結(jié)果唯绍。
數(shù)字在字符中的索引與我們們實(shí)際數(shù)字位數(shù)是相反的拼岳,所以我們計(jì)算時(shí)先算最高位。
int multiple = (int)Math.Pow(10, str.Length);
再依次遞減倍數(shù)推捐,所以數(shù)的總和就是我們要求得的字符的int值裂问。
for (int i=0; i < chars.Length; i++)
{
multiple /= 10;
endInt += (chars[i]-48) * multiple;//這里得到的結(jié)果是ASCII,所以按表要減48
Debug.Log("endInt:" + endInt);
}
看下我們的結(jié)果
--------------
這個(gè)功能比較簡單牛柒,工程就不上傳了堪簿,最后給上我的代碼∑け冢可以自己測試一下吧椭更。
雖然是很基礎(chǔ)的東西,但是很多強(qiáng)大的技術(shù)都是由基礎(chǔ)變化而來的蛾魄。
private string str = "123456789";
int StringToInt(string str) {
if (str == string.Empty || str == null)
{
return 0;
}
char[] chars = str.ToCharArray();
int endInt = 0;
if (str.Length > 1)
{
int multiple = (int)Math.Pow(10, str.Length);
for (int i=0; i < chars.Length; i++)
{
multiple /= 10;
endInt += (chars[i]-48) * multiple;//這里得到的結(jié)果是ASCII虑瀑,所以按表要減48
Debug.Log("endInt:" + endInt);
}
}
return endInt;
}