有一个函数,将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;
学长说和编译器有关系。