fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <bitset>
  4.  
  5. std::uint64_t key_reg(std::uint8_t* bytes, std::size_t pos, std::size_t n)
  6. {
  7. std::uint64_t reg = 0;
  8. auto start = bytes + pos / 8;
  9. auto end = bytes + n / 8 + ( n % 8 != 0 );
  10. std::reverse_copy( start, end, reinterpret_cast<char *>( &reg ) );
  11. reg >>= ( n + pos ) % 8;
  12. reg &= ~( -1UL << n );
  13. return reg;
  14. }
  15.  
  16. int main()
  17. {
  18. std::uint8_t bt1[] = {255, 0, 255};
  19. std::cout << std::bitset<64>( key_reg( bt1, 2, 15 ) ).to_string() << std::endl;
  20. std::uint8_t bt2[] = {7, 128, 7};
  21. std::cout << std::bitset<64>( key_reg( bt2, 2, 9 ) ).to_string() << std::endl;
  22. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
0000000000000000000000000000000000000000000000000011111111000000
0000000000000000000000000000000000000000000000000000000111100000