C++将无结束符字符串(ASCII)转为数字数值的快速方法(支持16进制)

通常情况下的字符串转为数字,可以使用C的atoi,或者C++的sstream来转换,但是这要求待转换源字符串要有\0结束符,如果只想转换字符串中一部分,或者转换char*中不带结束符的字符串的时候,以上的方式均需要将字符拷贝出来并且给出结束符才能进行下一步转换,有了拷贝的动作转换的速度就慢了,以下的方法是根据ASCII字符对应数值的特点循环将字符转换为数字数值的函数,并支持16进制。


//************************************
// Method:    AsciiToByte 将ASCII字符转换为数字
// Returns:   BYTE 返回的数字
// Parameter: BYTE b 待转换的字符
//************************************
BYTE AsciiToByte(BYTE b)
{
	BYTE ret = 0;
	if(b >= '0' && b <= '9')
		ret = b - '0';
	else if(b >= 'A' && b <= 'F')
		ret = b - 'A' + 10;
	else if(b >= 'a' && b <= 'f')
		ret = b - 'a' + 10;
	else
		ret = 0;
	return ret;
}

//************************************
// Method:    ReadNumber 将指定长度字符串转换为数字
// Returns:   int 返回的数值
// Parameter: BYTE * str 待转换的字符串指针
// Parameter: int count 待转换的字符串长度
// Parameter: bool radix16 是否16进制,默认false
//************************************
int ReadNumber(BYTE *str,int count, bool radix16 = false)
{
	int ret = 0;
	while(count-- > 0)
	{
		ret *= radix16 ? 16 : 10;
		ret += AsciiToByte(*str++);
	}
	return ret;
}

使用方法:

char *str = "12345ABCD";
int num10 = ReadNumber((BYTE*)str, 5);
int num16 = ReadNumber((BYTE*)str + 4,  5, true);
结果num10=12345,num16=371661


猜你喜欢

转载自blog.csdn.net/winnyrain/article/details/78336907