请将该问题回答了,以便我将其删除。
我有一个代表位串(或bloom过滤器)的字符向量:
std::vector<unsigned char> bit_table_;
问题:如何将向量转换为单个位串?
编辑:通常,bloom过滤器是位字符串:例如10010101011000.在here中,它表示为上述向量。我想将其转换为位字符串。
答案 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 long
或unsigned long long
内,则可以快速取出打包的位:
unsigned long bits = bs.to_ulong();
unsigned long long bits = bs.to_ullong();