gpt4 book ai didi

c++ 将带有 ":"的十六进制字符串转换为原始 "binary"字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:46 26 4
gpt4 key购买 nike

我有以下代码将加密的密文转换为可读的十六进制格式:

std::string convertToReadable(std::string ciphertext)
{
std::stringstream outText;

for(unsigned int i = 0; i < ciphertext.size(); i++ )
outText << std::hex << std::setw(2) << std::setfill('0') << (0xFF & static_cast<byte>(ciphertext[i])) << ":";

return outText.str();
}

这个函数的可读结果是这样的:

56:5e:8b:a8:04:93:e2:f1:5c:20:8b:fd:f5:b7:22:0b:82:42:46:58:9b:d4:c1:8e:ac:62:85:04:ff:7f:c6:d3:

现在我需要返回,将可读格式转换为原始的密文以便对其进行解密:

std::string convertFromReadable(std::string text)
{
std::istringstream cipherStream;

for(unsigned int i = 0; i < text.size(); i++ )
{
if (text.substr(i, 1) == ":")
continue;

std::string str = text.substr(i, 2);
std::istringstream buffer(str);
int value;
buffer >> std::hex >> value;
cipherStream << value;
}

return cipherStream.str();
}

这不是绝对有效,因为我返回了错误的字符串。

如何修复 convertFromReadable() 以便我可以恢复原始的 ciphertext

感谢帮助

最佳答案

在进一步调试之前,您应该解决以下问题:

  • cipherStream应该是 ostringstream , 不是 istringstream
  • for循环应该在结束前停止两个字符。否则你的substr会失败的。使循环条件 i+2 < text.size()
  • 当你从输入中读取两个字符时,你需要前进i两个,即添加 i++std::string str = text.substr(i, 2);之后行。
  • 因为你想要字符输出,给char加上一个强制转换将数据写入 cipherStream 时,即 cipherStream << (char)value

关于c++ 将带有 ":"的十六进制字符串转换为原始 "binary"字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com