【问题标题】:Convert a vector of characters to a single string [duplicate]将字符向量转换为单个字符串[重复]
【发布时间】:2019-02-07 10:07:33
【问题描述】:

如果这个问题已经回答,请告诉我,我会删除它。


我有一个代表位串(或布隆过滤器)的字符向量:

std::vector<unsigned char> bit_table_;

问题:如何将向量转换为单个位串?

编辑:一般来说,布隆过滤器是一个位串:例如10010101011000。在here 中,它表示为上述向量。我想将其转换为位串。

【问题讨论】:

  • 您介意进一步定义 single string 吗?你想要std::string?
  • 标记为重复。另外,请下次自己进行谷歌搜索。与写一个问题相比,您花费的时间更少,并且不需要任何人近距离投票。
  • @paul 确定我下次会这样做。请注意,该链接不能解决我的问题。请参阅下面的评论。
  • @Blastfurnace 您能否在下面查看我对答案(由@Derek 提供)的评论。如果不清楚,请告诉我。谢谢!
  • @Blastfurnace 一个长的位串已被表示为向量:bit_table_。我想将向量转换为一串位。

标签: c++ string c++11 char


【解决方案1】:

位字符串的最佳 C++ 库是名字奇特的 bitset(奇怪是因为它是有序的,而不是无序的):

std::bitset<1024> bs;
for (int i = 0; i < bit_table_.size(); ++i) {
    bs[i] = bit_table_[i];
}

bitset 的一个便利功能是可以一次打印整个内容,作为人类可读的位串,MSB 在左侧,LSB 在右侧(例如,数字 45 的“00101101” ):

std::cout << bs << std::endl;

请注意,bitset 需要在编译时知道位串的大小(或至少上限)。 (我选择 1024 只是为了证明它可以比你机器的字长大得多。)

但是,如果您的位向量确实适合 unsigned longunsigned long long,那么您可以快速取出打包的位:

unsigned long bits = bs.to_ulong();
unsigned long long bits = bs.to_ullong();

【讨论】:

  • 感谢您的回答。但是,结果向量是字符的串联,而不是位串!所以,它不能解决我的问题。
  • 啊,在这种情况下,您需要bitset。我将编辑我的答案。
  • 感谢您的帮助,我使用 GNU 库使用 mpz_import() 和 mpz_export() 设法做到了。所以我们的想法是我们将向量元素转移到一个字符数组中。然后,将数组传递给 mpz_import 并获得一个大整数值。为了反转这个过程,我们将一个空数组和一个大整数传递给 mpz_export 来获取一个 char 数组。
猜你喜欢
  • 1970-01-01
  • 2013-06-05
  • 2013-08-22
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多