在 C++ 中将字符或字符串转换为位集

Posted

技术标签:

【中文标题】在 C++ 中将字符或字符串转换为位集【英文标题】:Convert char or string to bitset in c++ 【发布时间】:2014-04-17 19:59:14 【问题描述】:

我正在做一项关于 DES 加密的作业,但我似乎无法将字符串转换,更不用说将字符转换为位集了。谁能告诉我如何在 C++ 中将单个字符转换为位集?

【问题讨论】:

std::bitset 接受用于构造的字符串。你考虑过使用它吗? 评论应该被接受。 【参考方案1】:

以下内容:

char c = 'A';
std::bitset<8> b(c);  // implicit cast to unsigned long long

应该可以。

见http://ideone.com/PtSFvz


如果可能的话,将任意长度的 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;
  

这可能效率有点低,但我不知道是否有更好的解决方法。

【讨论】:

以上是关于在 C++ 中将字符或字符串转换为位集的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Amazon Redshift 中将整数转换为位字符串?

如何在 PostgreSQL 中将长 NUMERIC 整数转换为位字符串?

在python中将字节转换为位

如何在 C++ 中将大数字符串转换为整数?

如何在 C++ 中将 std::thread::id 转换为字符串?

如何在 C++ 中将数字字符串转换为 int 数组 [重复]