Linux下的itoa函數(shù)
linux需要itoa函數(shù),下面我就提供一份跨平臺的itoa函數(shù)。
//return the length of result string. support only 10 radix for easy use and better performance
int my_itoa(int val, char* buf)
{
const int radix = 10;
char* p;
int a; //every digit
int len;
char* b; //start of the digit char
char temp;
p = buf;
if (val < 0)
{
*p++ = '-';
val = 0 - val;
}
b = p;
do
{
a = val % radix;
val /= radix;
*p++ = a + '0';
} while (val > 0);
len = (int)(p - buf);
*p-- = 0;
//swap
do
{
temp = *p;
*p = *b;
*b = temp;
--p;
++b;
} while (b < p);
return len;
}
這個(gè)函數(shù)會返回字符串的長度,在某些場合下會很有用。
我測試了一下,這個(gè)函數(shù)大概比MFC自帶的itoa要快20%左右。
(因?yàn)椴恍枰谘h(huán)體內(nèi)判斷if (a > 9)了,所以更快)。
2010/1/8 改進(jìn)版:
//return the length of result string. support only 10 radix for easy use and better performance
int my_itoa(int val, char* buf)
{
const unsigned int radix = 10;
char* p;
unsigned int a; //every digit
int len;
char* b; //start of the digit char
char temp;
unsigned int u;
p = buf;
if (val < 0)
{
*p++ = '-';
val = 0 - val;
}
u = (unsigned int)val;
b = p;
do
{
a = u % radix;
u /= radix;
*p++ = a + '0';
} while (u > 0);
len = (int)(p - buf);
*p-- = 0;
//swap
do
{
temp = *p;
*p = *b;
*b = temp;
--p;
++b;
} while (b < p);
return len;
}
改進(jìn):將除法運(yùn)算從有符號整數(shù)改為了無符號整數(shù)。典型速度從240毫秒左右,提高到了180毫秒左右。作為對比,MFC自帶的itoa耗時(shí)是320毫秒左右。
(x86機(jī)器做無符號整數(shù)的除法要更快一些,匯編指令不同)
【編輯推薦】