2016-04-03 112 views
4

我正在实现DES算法,我需要将std::bitset<56> permutationKey分为两部分。将std :: bitset分为两部分?

std::bitset<56> permutationKey(0x133457799BBCDF); 
std::bitset<28> leftKey; 
std::bitset<28> rightKey; 

std::bitset<56> divider(0b00000000000000000000000000001111111111111111111111111111); 

rightKey = permutationKey & divider; 
leftKey = (permutationKey >> 28) & divider; 

我试图强制转换bitset<56>bitset<28>但没有奏效。

达到同样目的的其他方法是逐个迭代和分配每个位。我想实现它而不使用循环,必须有另一种方式。

我能够与原始类型

uint64_t key = 0b0001010101010101110110001100001110000011111100000000011111000000; 
        //00010101.01010101.11011000.11000011---|---10000011.11110000.00000111.11000000 
uint32_t right = (uint32_t)key; 
uint32_t left = key >> 32; 

我怎么可以拆分bitset这样做呢?

+0

那么,好老掩饰和转移可能会派上用场。 –

+0

那么这是最后一个选择:-)。 –

+0

您甚至可以考虑为此提供基于模板的此类功能版本(实例化某些偶数大小)。 –

回答

4
std::bitset<56> permutationKey(0x133457799BBCDF); 
std::bitset<56> divider(0b00000000000000000000000000001111111111111111111111111111); 

auto rightKey = std::bitset<28> ((permutationKey & divider).to_ulong()); 
auto leftKey = std::bitset<28> (((permutationKey >> 28) & divider).to_ulong()); 
+1

哇!这很简单:-)。 –

+2

文档是新的黑色。你应该得到一些! ;-) http://en.cppreference.com/w/cpp/utility/bitset –