2017-07-04 66 views
2

我有收到一些参数和一个整数,以标志哪些是无效的远程服务:如何设置位?

byte<(param_count + 7)/8> null bitmap 

我已经尝试了天真的实现,但因为我没有经验,在比特移位我会而不是显示它。

因此,给定一个布尔值的矢量,我该如何创建我的位图?

+1

'std :: vector '是一个位图。就像'std :: bitset':http://en.cppreference.com/w/cpp/utility/bitset – Jonas

+0

如何将'std :: vector '变成一个整数? – ruipacheco

+0

如果您使用'bitset',则可以使用'to_ulong'方法。矢量实现可能会在引擎盖下使用bitset,但不一定。 –

回答

4

如果编译时已知param_count,则可以使用std::bitset。这里有一个例子:

// Define a bitmap with 'param_count + 7' elements 
std::bitset<param_count + 7> b; 

// Set the fifth bit, zero is the first bit 
b[4] = 1; 

// Convert to 'unsigned long', and the casting it to an int. 
int a = int(b.to_ulong()); 

如果param_count在编译时知道的,您可以使用std::vector<bool>。下面是另一个例子:

// Define a bitmap with 'param_count + 7' elements 
std::vector<bool> b(param_count + 7); 

// Set the fifth bit, zero is the first bit 
b[4] = 1; 

// Convert to 'int' 
int a = std::accumulate(b.rbegin(), b.rend(), 0, [](int x, int y) { return (x << 1) + y; }); 

std::vector<bool>int的转换从this answer服用。

+0

@ Rakete1111你是对的,我加了一个'矢量'版本。 – Jonas

+0

param_count在编译时未知。 – ruipacheco