2016-04-03 10 views
4

Ich implementiere DES-Algorithmus und ich muss std::bitset<56> permutationKey in zwei Hälften teilen.Split Std :: Bitset in zwei Hälften?

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; 

Ich versuchte bitset<56>-bitset<28> typisieren, aber es hat nicht funktioniert.

Eine andere Möglichkeit, dasselbe zu erreichen, besteht darin, jedes Bit einzeln zu iterieren und zuzuordnen. Ich will es erreichen, ohne Schleifen zu benutzen, es muss einen anderen Weg geben.

konnte ich es mit primitiven Typen

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

tun, wie ich bitset wie folgt aufteilen?

+0

Nun, gute alte Bit Maskierung und Verschiebung könnte hier nützlich sein. –

+0

Nun, es ist eine letzte Option :-). –

+0

Sie könnten sogar in Erwägung ziehen, eine vorlagenbasierte Version einer solchen Funktion (Instanziieren bestimmter gerader Größen) dafür bereitzustellen. –

Antwort

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

Wow! Es war so einfach :-). –

+2

Dokumentation ist das neue Schwarz. Du solltest etwas bekommen! ;-) http://en.cppreference.com/w/cpp/utility/bitset –