将字符向量转换为单个字符串

时间:2018-09-01 19:06:29

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

请将该问题回答了,以便我将其删除。


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

std::vector<unsigned char> bit_table_;

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

编辑:通常,bloom过滤器是位字符串:例如10010101011000.在here中,它表示为上述向量。我想将其转换为位字符串。

1 个答案:

答案 0 :(得分:3)

对于位字符串而言,最好的C ++库是奇数命名的bitset(奇数,因为它是有序的,而不是无序的):

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

bitset的一个便利功能是可以将整个内容作为人类可读的位字符串立即打印出来,其中MSB在左侧,而LSB在右侧(例如,“ 00101101” 45号):

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

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

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

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