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

23 篇文章 1 订阅

通常情况下的字符串转为数字,可以使用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


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值