2
我正在寫一個算法來解碼base64。在靠近盡頭下面的代碼,如果我改變:奇怪的行爲與子字符串
Binary.substr((FirstChar - 1) >= 0 ? (I - 1) : 0);
到
Binary.substr((I - 1) >= 0 ? (I - 1) : 0);
它拋出std::out_of_range
。不過,如果我不管它,它工作正常..
整個代碼如下:
#include <iostream>
#include <bitset>
#include <algorithm>
static const std::string Base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/";
std::string DecodeBase64(std::string Data)
{
std::string Binary = std::string();
std::string Result = std::string();
for (std::size_t I = Data.size(); I > 0; --I)
{
if (Data[I - 1] != '=')
{
std::string Characters = Data.substr(0, I);
for (auto it = Characters.begin(); it != Characters.end(); ++it)
Binary += std::bitset<6>(Base64Chars.find(*it)).to_string();
break;
}
}
for (std::size_t I = 0; I < Binary.size(); I += 8)
{
int FirstChar = I;
std::string str = Binary.substr((FirstChar - 1) >= 0 ? (I - 1) : 0);
Result += static_cast<char>(std::bitset<8>(str).to_ulong());
if (I == 0) ++I;
}
return Result;
}
int main()
{
std::cout<<DecodeBase64("aGVsbG8gdGhlcmUgbm9vYg==");
}
這是奇怪,因爲我分配給I
權FirstChar
之前,我稱之爲substr
所以它應該是同樣的確切值..任何想法,爲什麼發生這種情況?
OMG ..簽署對無符號=(謝謝你這的確修復它我現在得更加小心 – Brandon
!。 @CantChooseUsernames Double facepalms是有史以來最好的學習時刻;)... –