如何将char转换为c ++中的位数组?

时间:2012-12-11 15:57:51

标签: c++

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

编辑:我试图用asm复制我做的事情,在内存中读取文件并逐位遍历它,操作每个位,再做一些加密并保存回来。

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

4 个答案:

答案 0 :(得分:6)

标准库有一个类std::bitset。这可能就是你所需要的。

答案 1 :(得分:4)

您可以使用位运算符迭代它:

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

这会将c移到i位置的右侧,并使用按位AND获取最低有效位的值。

答案 2 :(得分:2)

您需要使用位掩码和位操作符&|>>和/或<<。我猜你要将它们存储在一个bool类型的数组中,比如bool bitArray[256];

当然,使用unsigned char来存储一堆比特是标准做法。

答案 3 :(得分: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
}