Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <bitset>
  3. #include <vector>
  4.  
  5. class BitWriter
  6. {
  7. public:
  8.     BitWriter() : bitCount(0) {}
  9.  
  10.     void WriteBit(unsigned char bit)
  11.     {
  12.         if (bitCount == buffer.size() * 8)
  13.             buffer.push_back(0);
  14.         if (bit)
  15.             buffer[bitCount/8] |= 1 << (7 - bitCount % 8);
  16.         bitCount++;
  17.     }
  18.  
  19.     void WriteByte(unsigned char byte)
  20.     {
  21.         if (bitCount % 8 == 0)
  22.             buffer.push_back(byte);
  23.         else
  24.         {
  25.             int offset = bitCount % 8;
  26.             buffer[bitCount/8] |= byte >> offset;
  27.             buffer.push_back(byte << (8 - offset));
  28.         }
  29.         bitCount += 8;
  30.     }
  31.  
  32.     const std::vector<unsigned char> &getBuffer() const
  33.     {
  34.         return buffer;
  35.     }
  36.  
  37.     size_t getBitCount() const
  38.     {
  39.         return bitCount;
  40.     }
  41.  
  42. private:
  43.     std::vector<unsigned char> buffer;
  44.     size_t bitCount;
  45. };
  46.  
  47. void visualizeBuffer(const std::vector<unsigned char> &buffer)
  48. {
  49.     for (auto &b: buffer)
  50.     {
  51.         std::cout << std::bitset<8>(b) << "|";
  52.     }
  53.     std::cout << std::endl;
  54. }
  55.  
  56. int main()
  57. {
  58.     BitWriter bw;
  59.     bw.WriteBit(1);
  60.     bw.WriteBit(0);
  61.     bw.WriteBit(0);
  62.     bw.WriteBit(1);
  63.     bw.WriteBit(1);
  64.     bw.WriteBit(1);
  65.     bw.WriteBit(0);
  66.     bw.WriteBit(1);
  67.  
  68.     bw.WriteByte(1);
  69.     bw.WriteByte(255);
  70.     bw.WriteBit(0);
  71.     bw.WriteBit(0);
  72.     bw.WriteByte(255);
  73.  
  74.     visualizeBuffer(bw.getBuffer());
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement