我需要将一个字符串的每个字符作为数组中的一个位序列,或者只是在循环中遍历它,无论哪种方式都有效。这是我以前在ASM中做的事情,并且不确定如何在c ++中完成。
编辑:我试图用asm复制我做的事情,在内存中读取文件并逐位遍历它,操作每个位,再做一些加密并保存回来。基本上是一个简单的加密。它不是一个家庭作业,也不是一个项目。
答案 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
}