【发布时间】:2023-04-08 11:23:01
【问题描述】:
我正在做一项关于 DES 加密的作业,但我似乎无法将字符串转换,更不用说将字符转换为位集了。谁能告诉我如何在 C++ 中将单个字符转换为位集?
【问题讨论】:
-
std::bitset接受用于构造的字符串。你考虑过使用它吗? -
评论应该被接受。
我正在做一项关于 DES 加密的作业,但我似乎无法将字符串转换,更不用说将字符转换为位集了。谁能告诉我如何在 C++ 中将单个字符转换为位集?
【问题讨论】:
std::bitset 接受用于构造的字符串。你考虑过使用它吗?
以下内容:
char c = 'A';
std::bitset<8> b(c); // implicit cast to unsigned long long
应该可以。
如果可能的话,将任意长度的 string 转换为 bitset 会更难。 bitset 的大小必须在编译时知道,因此实际上没有办法将字符串转换为一个。
但是,如果您在编译时知道字符串的长度(或者可以在编译时绑定它),您可以执行以下操作:
const size_t N = 50; // bound on string length
bitset<N * 8> b;
for (int i = 0; i < str.length(); ++i) {
char c = s[i];
for (int j = 7; j >= 0 && c; --j) {
if (c & 0x1) {
b.set(8 * i + j);
}
c >>= 1;
}
}
这可能效率有点低,但我不知道是否有更好的解决方法。
【讨论】: