高效的將整型型別轉換為字串的方法

2021-07-31 07:39:13 字數 2582 閱讀 9162

最近在專案中需要用到將數字轉換為字串,這裡主要記錄在使用過程中的一些思考。並且提供了乙個較高效的轉換實現。

說到如何將數字轉換為字串,我們可能先想到的是c函式庫提供的snprintf等系列的函式或是c++庫提供的功能更為強大的stringstream物件來進行轉換。

沒錯c函式庫提供的snprintf等系列函式非常的好用和方便。

例如:我們想要將乙個int型的數值轉換為對應的字串。

#include #include using namespace std;

int main(void)

結果正是我們想要的:

-2147483648

c++庫提供stringstream物件也能簡單的完成這樣的轉換。

#include #include using namespace std;

int main(void)

輸出如下:

-2147483648
使用起來相當的方便。不得不感嘆stringstream的強大,安全,自動和直接。

下面我們來考慮使用snprintf或stringstream將數字轉換為字串的效率問題,在測試中我們關閉了優化選項,效率的測試在window(vs2013)上執行和linux上面執行,在不同的機器上測試可能會有不同的表現。

先來看看用snprintf來執行數值轉換的效率吧!

#include #include #include using namespace std;

int main(void)

在window上:	執行20000000次	8s	

在linux上: 執行40000000次 4s

結果差距有點大。

再來看看使用stringstream進行轉換吧!

#include #include #include using namespace std;

int main(void)

time(&newtime);

cout << strbuffer << endl;

cout << "time = " << newtime - oldtime << endl;

return 0;

}

在window上:	執行20000000次	274s	

在linux上: 執行40000000次 29s

差距同樣很大。

看上去效率還行,如果需要在高效點呢!ps:這裡並不是評判snprintf或stringstream,相反我覺得非常的好用。只是snprintf或stringstream的功能強大,將數值轉換為字串只是它們的一小部分功能。

於是,就針對高效的將整型轉換為字串進行思考。下面給出第一次的實現:

#include #include #include using namespace std;

const char numtab = ;

templateint numbertostring(char arrbuffer, t value)

while(tmpvalue != 0);

if(value < 0)

*ptmp++ = '-';

*ptmp = '\0';

//反轉元素順序

std::reverse(arrbuffer, ptmp);

return static_cast(ptmp - arrbuffer);

}int main(void)

在window上:	執行20000000次	19s	

在linux上: 執行40000000次 5s

好吧!比起snprintf更慢,有點讓人失望。繼續改進。

#include #include using namespace std;

const char numtab = ;

templateint numbertostring(char arrbuffer, t value)

while((tmpvalue1 /= 10) != 0);

char *ptmp = arrbuffer + istrnum;

*ptmp-- = '\0';

do while(tmpvalue2 != 0);

if(value < 0)

*ptmp = '-';

return istrnum;

}int main(void)

在window上:	執行20000000次	4s	

在linux上: 執行40000000次 4s

現在的效率還行,不管在linux或window上至少比snprintf和stringstream快(在linux上和snprintf差不多)。

暫時沒想到什麼更高效的方法,就行這樣了。

muduo 高效整型轉換為字串

muduo中有一段高效的整形轉換為字串的演算法,這裡記錄一下 efficient integer to string conversions,by matthew wilson include include includeconst char digits 9876543210123456789 ...

字串轉換為整型

在swift中,字串轉換為整型的方法有兩種,我們在這裡比較一下這兩種方法的區別 1 使用強制型別轉換,如下 var str 1234 var integer int str print integer 輸出1234 但如果換乙個字串 var str 123,4 var integer int str...

atoi 字串數字轉換為整型

實現字串中的數字轉換為整型,具體規則見原始碼注釋。gcc編譯通過。第一種 過程有些繁瑣 include 求冪 此處求冪也可以呼叫math.h中的函式pow 編譯時新增 lm 引數。double mypow double x,double y return tmp 轉化字串中的數字字元到整數。規則如下...