我需要将字符串的每个字符作为一个位序列放在一个数组中,或者只是在循环中遍历它,无论哪种方式都有效。这是我过去在 ASM 中所做的事情,但不确定如何在 C++ 中完成。
编辑:我正在尝试用 asm 复制我曾经做过的事情,读取内存中的文件并一点一点地遍历它,操纵每一位,进行更多的密码化并将其保存回来。
基本上是一个简单的加密。它不是作业,也不是项目。
我需要将字符串的每个字符作为一个位序列放在一个数组中,或者只是在循环中遍历它,无论哪种方式都有效。这是我过去在 ASM 中所做的事情,但不确定如何在 C++ 中完成。
编辑:我正在尝试用 asm 复制我曾经做过的事情,读取内存中的文件并一点一点地遍历它,操纵每一位,进行更多的密码化并将其保存回来。
基本上是一个简单的加密。它不是作业,也不是项目。
您可以使用位运算符对其进行迭代:
unsigned char c = 'a'
for(int i = 0; i < 8; i++)
{
std::cout << (c >> i) & 1 << std::endl;
}
这将c
向右移动i
位置,并使用按位与来获取最低有效位的值。
标准库为此提供了一个类,std::bitset
. 这可能是你需要的。
您可以遍历字符并使用位掩码检查位
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
}
您将希望使用位掩码和按位运算符&
,|
和>>
/或可能<<
. 我猜你会想要将它们存储在一个 bool 类型的数组中,比如bool bitArray[256];
当然,仅unsigned char
用于存储一堆位是标准做法。