我是c / c ++编程的新手,目前我正在研究一些基本的程序来接触这门语言。我最新的程序是一个简单的hex_xor函数,它遵循Cryptopals Challenge 2的指令。但是我已经收到错误了,而且我假设我正在使用我正在使用的指针做一些可怕的错误。
以下是我的计划的一部分:
const char* hex_char_to_bin(char c)
{
switch(toupper(c))
{
case '0': return "0000";
case '1': return "0001";
case '2': return "0010";
case '3': return "0011";
case '4': return "0100";
case '5': return "0101";
case '6': return "0110";
case '7': return "0111";
case '8': return "1000";
case '9': return "1001";
case 'A': return "1010";
case 'B': return "1011";
case 'C': return "1100";
case 'D': return "1101";
case 'E': return "1110";
case 'F': return "1111";
}
}
const char* hex_binary(const char* c){
std::string result = "";
for(int i = 0; i < strlen(c); i++){
result += hex_char_to_bin(c[i]);
}
return result.c_str();
}
int main(){
std::string s1 = "1c0111001f010100061a024b53535009181c";
std::string s2 = "686974207468652062756c6c277320657965";
const char* bin1 = hex_binary(s1.c_str());
const char* bin2 = hex_binary(s2.c_str());
std::cout << bin1 << "\n" << bin2 << std::endl;
return 0;
}
输出如下:
011010000110100101110100001000000111010001101000011001010010000001100010011101010110110001101100001001110111001100100000011001010111100101100101
011010000110100101110100001000000111010001101000011001010010000001100010011101010110110001101100001001110111001100100000011001010111100101100101
在两个变量(bin1 / 2)中都是第二个十六进制字符串的二进制转换。我的目标是(显然)将两个二进制字符串保存在不同的变量中,因此我可以继续使用xor-function。有人可以指出我未能实现目标的原因以及原因吗?其他提示也是受欢迎的!
答案 0 :(得分:4)
当主c_str()
对象不再存在时,您无法使用string
的结果。因此,您引用已释放的资源并面临未定义的行为。
如果我是你,我会更改hex_binary()
以返回std::string
并返回result
而不使用c_str()