數字以任意進制轉換成字符串----itoa的實現

    這幾天需要把一個int型整數轉換成指定進制的字符串,在windows下通過itoa實現了這個需求,然後發現在linux下沒有這個函數,然後網上都說可以通過sprintf等來實現轉換,但是還是不能實現itoa的任意進制轉換功能,想看一下itoa的源代碼吧,也搜不到,只好參考別人的寫法,自己實現了一下這個函數......

void itos_upper(int iValue, string &strDst, unsigned int uRadix)
{
	if (uRadix > 36 || uRadix < 2) return;

	static char szTemp[33];
	char *p = &szTemp[32];
	*p = '\0';

	bool bMinus = false;
	unsigned int uValue = (unsigned int)iValue;
	if (uRadix == 10 && iValue < 0)
	{
		uValue = (unsigned int)-iValue;
		bMinus = true;
	}

	do
	{
		*--p = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[uValue % uRadix];
		uValue /= uRadix;
	} while (uValue);

	if (bMinus)
		*--p = '-';

	strDst = p;
}

void itos_lower(int iValue, string &strDst, unsigned int uRadix)
{
	if (uRadix > 36 || uRadix < 2) return;

	static char szTemp[33];
	char *p = &szTemp[32];
	*p = '\0';

	bool bMinus = false;
	unsigned int uValue = (unsigned int)iValue;
	if (uRadix == 10 && iValue < 0)
	{
		uValue = (unsigned int)-iValue;
		bMinus = true;
	}

	do
	{
		*--p = "0123456789abcdefghijklmnopqrstuvwxyz"[uValue % uRadix];
		uValue /= uRadix;
	} while (uValue);

	if (bMinus)
		*--p = '-';

	strDst = p;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章