fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <bitset>
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8.  
  9. class MyBinary {
  10. private:
  11. static const unsigned _BIT_LEN = 1024;
  12.  
  13. const int _digits;
  14. int _len;
  15. bitset<_BIT_LEN> _acc;
  16.  
  17. public:
  18. MyBinary(int digits) : _digits(digits), _len(5), _acc(digits) {}
  19.  
  20. void add(unsigned long val) {
  21. _len += _digits;
  22. _acc <<= _digits;
  23.  
  24. for (int i(0); i<_digits; i++)
  25. _acc.set(i, val & (1U << i));
  26. }
  27.  
  28. vector<string> get_bit_strings(int offset) {
  29. string src(_acc.to_string().substr(_BIT_LEN - _len));
  30. vector<string> dst;
  31.  
  32. for (int i(0); i<_len; i+=offset) {
  33. if (i < _len-offset)
  34. dst.push_back(src.substr(i, offset));
  35. else {
  36. string tmp(src.substr(i, offset - (_len - i)));
  37. tmp.append(_len - i, '0');
  38. dst.push_back(tmp);
  39. }
  40. }
  41. return dst;
  42. }
  43. };
  44.  
  45. int main()
  46. {
  47. MyBinary mb(6);
  48.  
  49. mb.add(0);
  50. mb.add(20);
  51. mb.add(0);
  52. mb.add(20);
  53. vector<string> vs(mb.get_bit_strings(8));
  54.  
  55. for (int i(0); i<vs.size(); i++)
  56. cout << "0x" << std::hex << std::setw(2) << std::setfill('0') << bitset<8>(vs.at(i)).to_ulong() << endl;
  57.  
  58. return 0;
  59. }
Success #stdin #stdout 0.01s 2860KB
stdin
Standard input is empty
stdout
0x30
0x0a
0x00
0xa0