一行代码在visual studio的release和debug模式下运行结果不同

有一个函数,将string内原本的16进制数两两组合,编码回字符。

个人理解:Hex encoding of "Hello World!": "48656C6C6F20576F726C6421"

'H'=0x48

原本写法是:

std::string HexToString(const std::string& data)
{
	const std::string hex = "0123456789ABCDEF";
	map<char, int> map_hex_int{ {'0', 0}, {'1', 1}, {'2', 2} , {'3', 3} , {'4', 4} , {'5', 5} , {'6', 6} , {'7', 7} , {'8', 8} , {'9', 9} , {'A', 10} , {'B', 11} , {'C', 12} , {'D', 13} , {'E', 14} , {'F', 15} };
	std::stringstream ss;

	for (std::string::size_type i = 0; i < data.size(); ++i) {
		int num = map_hex_int[data[i++]] * 16 + map_hex_int[data[i]];
		ss << (char)num;

	}
	//std::cout << ss.str() << std::endl;
	return ss.str();
}

debug模式结果正确,release下结果出错。

release下

int num = map_hex_int[data[i++]] * 16 + map_hex_int[data[i]];
//等价于
int num = map_hex_int[data[i]] * 16 + map_hex_int[data[i]];
i++;

估计debug下把一句代码拆成好几段分别执行了。

改成这样没有歧义。

int num = map_hex_int[data[i]] * 16 + map_hex_int[data[i+1]];
i += 2;

学长说和编译器有关系。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值