Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bitset>
- #include <vector>
- class BitWriter
- {
- public:
- BitWriter() : bitCount(0) {}
- void WriteBit(unsigned char bit)
- {
- if (bitCount == buffer.size() * 8)
- buffer.push_back(0);
- if (bit)
- buffer[bitCount/8] |= 1 << (7 - bitCount % 8);
- bitCount++;
- }
- void WriteByte(unsigned char byte)
- {
- if (bitCount % 8 == 0)
- buffer.push_back(byte);
- else
- {
- int offset = bitCount % 8;
- buffer[bitCount/8] |= byte >> offset;
- buffer.push_back(byte << (8 - offset));
- }
- bitCount += 8;
- }
- const std::vector<unsigned char> &getBuffer() const
- {
- return buffer;
- }
- size_t getBitCount() const
- {
- return bitCount;
- }
- private:
- std::vector<unsigned char> buffer;
- size_t bitCount;
- };
- void visualizeBuffer(const std::vector<unsigned char> &buffer)
- {
- for (auto &b: buffer)
- {
- std::cout << std::bitset<8>(b) << "|";
- }
- std::cout << std::endl;
- }
- int main()
- {
- BitWriter bw;
- bw.WriteBit(1);
- bw.WriteBit(0);
- bw.WriteBit(0);
- bw.WriteBit(1);
- bw.WriteBit(1);
- bw.WriteBit(1);
- bw.WriteBit(0);
- bw.WriteBit(1);
- bw.WriteByte(1);
- bw.WriteByte(255);
- bw.WriteBit(0);
- bw.WriteBit(0);
- bw.WriteByte(255);
- visualizeBuffer(bw.getBuffer());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement