0

我需要将字符串的每个字符作为一个位序列放在一个数组中,或者只是在循环中遍历它,无论哪种方式都有效。这是我过去在 ASM 中所做的事情,但不确定如何在 C++ 中完成。

编辑:我正在尝试用 asm 复制我曾经做过的事情,读取内存中的文件并一点一点地遍历它,操纵每一位,进行更多的密码化并将其保存回来。

基本上是一个简单的加密。它不是作业,也不是项目。

4

4 回答 4

6

您可以使用位运算符对其进行迭代:

unsigned char c = 'a'
for(int i = 0; i < 8; i++)
{
  std::cout << (c >> i) & 1 << std::endl;
}

这将c向右移动i位置,并使用按位与来获取最低有效位的值。

于 2012-12-11T16:02:47.563 回答
6

标准库为此提供了一个类,std::bitset. 这可能是你需要的。

于 2012-12-11T16:01:38.217 回答
2

您可以遍历字符并使用位掩码检查位

char c;
for (int i = 0; i < 8; ++i) {
    bool is_set = c & (1 << i);
    std::out << "Bit " << i << ": " << is_set << '\n';
}

或字符串

std::string s;
for (auto p = s.begin(); p != s.end(); ++p) {
    char c = *p;
    // loop over the bits
}
于 2012-12-11T16:07:29.257 回答
2

您将希望使用位掩码和按位运算符&,|>>/或可能<<. 我猜你会想要将它们存储在一个 bool 类型的数组中,比如bool bitArray[256];

当然,仅unsigned char用于存储一堆位是标准做法。

于 2012-12-11T16:01:01.737 回答