C++ 将解码的Base64字节字符串转换为布尔向量

C++ 将解码的Base64字节字符串转换为布尔向量,c++,base64,C++,Base64,我有一个包含位的base64字符串,我已经用中的代码对它进行了解码。但我无法将结果字符串转换为我可以使用的位。有没有办法将代码中包含的字节转换为包含字符串位的布尔向量 我曾尝试用这段代码转换字符,但未能转换成正确的字符 void DecodedStringToBit(std::string const& decodedString, std::vector<bool> &bits) { int it = 0; for (int i = 0; i <

我有一个包含位的base64字符串,我已经用中的代码对它进行了解码。但我无法将结果字符串转换为我可以使用的位。有没有办法将代码中包含的字节转换为包含字符串位的布尔向量

我曾尝试用这段代码转换字符,但未能转换成正确的字符

void DecodedStringToBit(std::string const& decodedString, std::vector<bool> &bits) {
    int it = 0;
    for (int i = 0; i < decodedString.size(); ++i) {
        unsigned char c = decodedString[i];
        for (unsigned char j = 128; j > 0; j <<= 1) {
            if (c&j) bits[++it] = true;
            else bits[++it] = false;
        }
    }
}
void DecodedStringToBit(std::string const&decodedString,std::vector&bits){
int it=0;
对于(int i=0;i对于(OP的代码中的无符号字符j=128;j>0;j,不清楚向量
是否足够大,例如,如果调用者
resize
d(不应该!)。如果没有,则向量没有分配空间,因此
位[++it]
可能不起作用;适当的做法可能是
向后推
(此外,我认为代码可能需要
it
的后增量,即
位[it++]
位[0]
开始)


此外,在OP的代码中,
unsigned char j=128
jfor
循环的内部
的目的是错误的:它以错误的方式移动
j
。老实说,如果你想使用8位值,你应该使用正确的
类型,而不是
unsigned char

for (uint8_t j = 128; j; j >>= 1)
    bits.push_back(c & j);
另外,记住调用bits.reserve(decodedString.size()*8);
这样你的程序就不会在调整大小上浪费大量时间


我假设位顺序为MSB first。如果要先使用LSB,则循环将变为:

for (uint8_t j = 1; j; j <<= 1)

for(uint8_t j=1;j;j)从编码的
字符串中提取一个
char
并将其推回
向量(并在其上循环)有什么不对?字符串的值以字节为单位,因此一个char是一个字节,我必须得到一位,我尝试将其转换为8位,该代码为int=0;对于(int i=0;i0;j能否请您将您的代码以格式化的方式添加到问题正文中,以便更易于阅读?感谢您的输入!我这样做了,虽然它比我的工作更一致,但它将字符转换为字节。
sizeof(char)
可能是1,可能不是你想要的。@MikeDeSimone:不,我是说字符。谢谢你指出。
for (uint8_t j = 1; j; j <<= 1)