SkillAgentSearch skills...

Ayx.BitIO

BitReader and BitWriter to read and write bit stream

Install / Use

/learn @durow/Ayx.BitIO
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Ayx.BitIO

BitReader and BitWriter to read and write bit stream

Install package

PM>Install-Package Ayx.BitIO

Create a BitReader and read data

You can create a BitReader from bytes[],raw binary string,string with encoding and hex string.

byte[] buff = { 12, 23, 4, 125 };
var reader1 = new BitReader(buff);
var reader2 = new  BitReader("1010010110100101");
var reader3 = BitReader.FromHexString("E2F12325A6FF");
var reader4 = BitReader.FromString("This is a test string",Encoding.ASCII);

If you use ReadXXX method without offset parameter, read start offset is reader.Position and reader.Position will auto moved.

var reader = new BitReader("100101001001001100");
var i = reader.ReadInt(3); //i==4, and reader.Position add 3, reader.Position == 3
var b = reader.ReadBool(); //b==true, and reader.Position add 1, reader.Position == 4
var c = reader.ReadChar(8); //read 8bit as a character, c=='I', reader.Position == 12
var bin = reader.ReadBinString(5); //bin=="00110", reader.Position == 17

If you use ReadXXX method with offset parameter, reader.Position will not move automatically.

var reader = new BitReader("100101001001001100");
var i = reader.ReadInt(6,3); //i==1, reader.Position == 0
var b = reader.ReadBool(5); //b==true, reader.Position == 0
var c = reader.ReadChar(11,7); //read 7bit as a character, c=='L', reader.Position == 0
var bin = reader.ReadBinString(6,5); //bin=="00100", reader.Position == 0

Create a BitWriter and write data

Create a BitWriter is very simple

var writer = new BitWriter();

Write data is simple too

writer.WriteInt(25,6); //write 25 to 6bit, it is "011001"
writer.WriteChar('A',7); //write character A to 7bit, it is "1000001"
writer.WriteBool(true); //write true to 1 bit, it is "1"
writer.WriteBinaryString("10010"); //write raw binary string
//at this time,the data in writer is "0110011000001110010"

After write some data,you can get the result you want

var rawBin = reader.BinString.ToString(); //get the binary string, result is:"0110011000001110010"
var bin = reader.GetBinaryString(); //get binary string with 8bit align,result is:"011001100000111001000000"
var buff = reader.GetBytes(); //get 8bit aligned binary string to bytes, result is: { 102, 14, 64 }

Related Skills

View on GitHub
GitHub Stars14
CategoryDevelopment
Updated2y ago
Forks1

Languages

C#

Security Score

60/100

Audited on Sep 29, 2023

No findings