我正在尝试制作一个应该加密数字的程序。
#include <iostream>
#include <string>
int intToBin(int num)
{
std::string bin = "";
while (num > 0)
{
bin += std::to_string(num % 2);
num /= 2;
}
std::reverse(begin(bin), end(bin));
int nBin = std::stoi(bin);
return nBin;
}
int XOR(int b1, int b2)
{
if (b1 == 1 && b2 == 1)
return 0;
else if (b1 == 0 && b2 == 0)
return 0;
else
return 1;
}
int encrypt(int value, int key)
{
std::string encrypted = "";
value = intToBin(value);
key = intToBin(key);
std::string sValue = std::to_string(value);
std::string sKey = std::to_string(key);
int valueIteration = 0;
while (valueIteration < sValue.size())
{
for (int i = 0; i < sKey.size(); i++)
{
encrypted += std::to_string(XOR(sKey[i], sValue[valueIteration]));
valueIteration++;
}
}
return std::stoi(encrypted);
}
int main()
{
int code = encrypt(1500, 4);
std::cout << code << std::endl;
}
但是,在运行期间,int nBin = std::stoi(bin);
行上出现了异常
Unhandled exception at 0x77704662 in learnc++.exe:
Microsoft C++ exception: std::out_of_range at memory location 0x003BF9C0.
我首先编写了intToBin
函数,并且在测试它时运行良好。当我添加encrypt
函数时,问题开始了。
此外,我不知道为什么,但是如果在某种程度上相关,我会在行signed/unsigned mismatch
和while (valueIteration < sValue.size())
上收到for (int i = 0; i < sKey.size(); i++)
警告。