Click here to Skip to main content
Click here to Skip to main content

CBitStream - A simple C++ class for reading and writing variable-length data

, 22 Jan 2009 CPOL
Rate this:
Please Sign up or sign in to vote.
An article on a simple C++ class for reading and writing variable-length data.

Introduction

This article is about a simple C++ class for reading and writing variable-length data streams. This feature is often required when programming compression routines like LZW, or when dealing with binary formats like Flash or PDF. It offers the developer a possibility to write binary chunks of custom size: like 11 bits, or 27 bits, etc. So, basically, output is byte-aligned, but the inner structure can hold different length data chunks.

Background

I found a working solution to this problem here on the CodeProject. But, this one is written in C# .NET, so I could not use it directly. I have not translated the original article, but written this one from scratch. I hope that someone will find this work useful.

Using the Code

Using the class CBitStream is very simple. Please see the code below:

#include <span class="code-string">"BitStream.h"</span>

CBitStream bitStream;
bitStream.WriteBit(1);
bitStream.WriteByte('a');
bitStream.WriteWord(0x4441);
bitStream.WriteDWord(0x44410D0A);
bitStream.WriteData((LPBYTE)"ANSI text...", 12);
bitStream.WriteData((LPWORD)_T("UNICODE text..."), 15);
bitStream.SaveStream(_T("Enter output file path here..."));

Points of Interest

I have found that writing the CBitStream class described in this article was not too difficult as I have thought in first place. Also, now I have a simple tool that can help me in my everyday work.

History

  • CBitStream class version 1.0.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

darkoman
Software Developer (Senior) Elektromehanika d.o.o. Nis
Serbia Serbia
He has a master degree in Computer Science at Faculty of Electronics in Nis (Serbia), and works as a C++/C# application developer for Windows platforms since 2001. He likes traveling, reading and meeting new people and cultures.

Comments and Discussions

 
QuestionAny new/recent version of this class? Pinmemberjunaidfcs6-May-14 11:36 
QuestionRead in order PinmemberNerexis25-Nov-13 7:22 
GeneralSpice it up with Template functions Pinmemberrich_malina15-Apr-11 4:07 
GeneralReadBits Fix PinmemberMarco Giuntoni14-Apr-09 1:35 
GeneralRe: ReadBits Fix Pinmemberdarkoman14-Apr-09 20:47 
GeneralNice PinmemberBakaBug23-Jan-09 3:00 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.141216.1 | Last Updated 22 Jan 2009
Article Copyright 2009 by darkoman
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid