public void Should_ReadBit() { var stream = new BitStream(_testData1); var reader = new BitStreamReader(stream); var bit1 = reader.ReadBit(); var bit2 = reader.ReadBit(); Assert.AreEqual(0, bit1); Assert.AreEqual(1, bit2); }
public void ShouldNot_ReadBitsAndBytes() { var bytes = new byte[] { 0xFF, 0x01, 0xCC, 0xAA }; var stream = new BitStream(bytes); stream.AllowUnalignedOperations = false; var reader = new BitStreamReader(stream); var bit1 = reader.ReadBit(); var bit2 = reader.ReadBit(); var readBytes = new byte[4]; Assert.Throws <StreamUnalignedException>(() => reader.Read(readBytes, 0, readBytes.Length)); }
public void Should_ReadBitsAndBytes() { var bytes = new byte[] { 0xFF, 0x01, 0xCC, 0xAA }; var stream = new BitStream(bytes); stream.AllowUnalignedOperations = true; var reader = new BitStreamReader(stream); reader.ReadBit(); reader.ReadBit(); var readBytes = new byte[4]; reader.Read(readBytes, 0, readBytes.Length); // all bits will be shifted by 2 CollectionAssert.AreEqual(new byte[] { 127, 0, 179, 234 }, readBytes); }
/// <summary> /// Encodes a single pixel row. /// </summary> /// <param name="data"></param> /// <returns></returns> public byte[] EncodeRow(byte[] data) { var reader = new BitStreamReader(new MemoryStream(data)); int counter = 0; Initialize(); // iterate until stream ends while (reader.Position < reader.Length) { if (reader.ReadBit() != m_State) { // write out counted pixels WriteBits(counter); // found state change m_State = 1 - m_State; // reset counter counter = 0; } counter++; } // write the last data if (counter > 0) { WriteBits(counter); } // return return(Complete()); }
public static object Deserialize_Class(BitStreamReader reader) { if (reader.ReadBit() == false) { return(null); } return(NetSerializer.Deserialize(reader)); }
public void ReadBit_ReadSeveralBits_ValidResult() { var bytes = new byte[] { 0x31 }; var reader = new BitStreamReader(); reader.ReInitialize(new ArraySegment <byte>(bytes)); int bit1 = reader.ReadBit(); int bit2 = reader.ReadBit(); int bit3 = reader.ReadBit(); int bit4 = reader.ReadBit(); int bit5 = reader.ReadBit(); Assert.AreEqual(0, bit1); Assert.AreEqual(0, bit2); Assert.AreEqual(1, bit3); Assert.AreEqual(1, bit4); Assert.AreEqual(0, bit5); }
public LeafNode FindLeaf(BitStreamReader aReader) { var b = aReader.ReadBit(); if (b == 0) { return(left.FindLeaf(aReader)); } return(right.FindLeaf(aReader)); }
public static void Deserialize(ref String value, BitStreamReader reader) { if (reader.ReadBit()) { value = reader.ReadString(); } else { value = null; } }
public static ulong ReadDynamicLength(BitStreamReader aReader) { if (aReader.ReadBit() == 0) { return(aReader.ReadBits(7)); } if (aReader.ReadBit() == 0) { return(aReader.ReadBits(8) + 128UL); } ulong val = aReader.ReadBits(8); int shift = 8; while (aReader.ReadBit() == 1) { val |= aReader.ReadBits(4) << shift; shift += 4; } return(val + 384UL); }
public LiteralValuePacket(byte version, byte typeId, BitStreamReader reader) : base(version, typeId) { Value = 0; while (reader.ReadBit()) { Value = Value << 4; Value |= reader.ReadByte(4); } Value = Value << 4; Value |= reader.ReadByte(4); }
private static INode GenerateTree(BitStreamReader aReader) { var bit = aReader.ReadBit(); if (bit != 0) { return(new LeafNode((byte)aReader.ReadBits(8))); } var n1 = GenerateTree(aReader); var n2 = GenerateTree(aReader); return(new TreeNode(n1, n2)); }
/// <summary> /// Decode /// </summary> /// <param name="data"></param> /// <param name="extra"></param> /// <param name="reader"></param> /// <returns>number of bits decoded, 0 for error</returns> internal void Decode(ref int data, ref int extra, BitStreamReader reader) { // Find the prefix length byte prefIndex = 0; while (reader.ReadBit()) { prefIndex++; } // First indicate there is no extra data extra = 0; // More efficient for 0 if (0 == prefIndex) { data = 0; return; } else if (prefIndex < _huffBits.GetSize()) { // Find the data lenght uint nDataLen = _huffBits.GetBitsAtIndex(prefIndex); // Extract the offset data by lower dound with sign bit at LSB long nData = reader.ReadUInt64((int)(byte)nDataLen); // Find the sign bit bool bNeg = ((nData & 0x01) != 0); // Construct the data nData = (nData >> 1) + _mins[prefIndex]; // Adjust the sign bit data = bNeg ? -((int)nData) : (int)nData; // return the bit count read from stream return; } else if (prefIndex == _huffBits.GetSize()) { // This is the special prefix for extra data. // Decode the prefix first int extra2 = 0; int extra2Ignored = 0; Decode(ref extra2, ref extra2Ignored, reader); extra = extra2; // Following is the actual data int data2 = 0; Decode(ref data2, ref extra2Ignored, reader); data = data2; return; } throw new ArgumentException(StrokeCollectionSerializer.ISFDebugMessage("invalid huffman encoded data")); }
public OperatorPacket(byte version, byte typeId, BitStreamReader reader) : base(version, typeId) { Value = 0; Packets = new List <Packet>(); bool lengthTypeId = reader.ReadBit(); if (lengthTypeId) { int numPackets = reader.ReadByte(8) << 8 | reader.ReadByte(3); for (int i = 0; i < numPackets; i++) { Packets.Add(CreatePacket(reader)); } } else { int numBits = reader.ReadByte(8) << 7; numBits |= reader.ReadByte(7); List <byte> bytes = new List <byte>(); int i; for (i = numBits; i >= 8; i -= 8) { bytes.Add(reader.ReadByte(8)); } if (i > 0) { bytes.Add((byte)((byte)reader.ReadByte(i) << (8 - i))); } BitStreamReader innerReader = new BitStreamReader(bytes.ToArray(), (uint)numBits); while (!innerReader.EndOfStream) { Packets.Add(Packet.CreatePacket(innerReader)); } } }
public static Boolean ReadBool(this BitStreamReader reader) { return(reader.ReadBit()); }
static void Main(string[] args) { if (!System.IO.File.Exists(fileName)) { throw new System.IO.FileNotFoundException(); } int record_count = 0; using (var wdb_stream = new BinaryReader(File.OpenRead(fileName))) { var signature = wdb_stream.ReadBytes(4); var build = wdb_stream.ReadUInt32(); var locale = Encoding.UTF8.GetString(wdb_stream.ReadBytes(4).Reverse().ToArray()); var unk_h1 = wdb_stream.ReadInt32(); var unk_h2 = wdb_stream.ReadInt32(); var version = wdb_stream.ReadInt32(); Console.WriteLine(fileName); Console.WriteLine("Locale: " + locale); Console.WriteLine("Build: " + build); using (var writer = File.CreateText(fileName + ".sql")) { while (wdb_stream.BaseStream.Position != wdb_stream.BaseStream.Length) { var entry = wdb_stream.ReadInt32(); var size = wdb_stream.ReadInt32(); if (entry == 0 && size == 0) { break; } ++record_count; #region reader var row_bytes = wdb_stream.ReadBytes(size); var reader = new BitStreamReader(row_bytes); int titleLen = (int)reader.ReadUInt32(11); int titleAltLen = (int)reader.ReadUInt32(11); int cursorNameLen = (int)reader.ReadUInt32(6); var racialLeader = reader.ReadBit() ? 1 : 0; int[] male_names_len = new int[4]; int[] female_name_len = new int[4]; string[] male_names = new string[4]; string[] female_names = new string[4]; for (int i2 = 0; i2 < 4; ++i2) { male_names_len[i2] = (int)reader.ReadUInt32(11); female_name_len[i2] = (int)reader.ReadUInt32(11); } for (int i2 = 0; i2 < 4; ++i2) { male_names[i2] = reader.ReadEsqapedSqlString2(male_names_len[i2]); female_names[i2] = reader.ReadEsqapedSqlString2(female_name_len[i2]); } var type_flags = reader.ReadUInt32(); var type_flags2 = reader.ReadUInt32(); var type = reader.ReadInt32(); var family = reader.ReadInt32(); var rank = reader.ReadInt32(); var kill_kredit1 = reader.ReadInt32(); var kill_kredit2 = reader.ReadInt32(); var modelid1 = reader.ReadInt32(); var modelid2 = reader.ReadInt32(); var modelid3 = reader.ReadInt32(); var modelid4 = reader.ReadInt32(); var HealthModifier = reader.ReadFloat(); var ManaModifier = reader.ReadFloat(); var quest_item_count = reader.ReadInt32(); var movement_id = reader.ReadInt32(); var unk543 = reader.ReadInt32(); // unk EXP var questFlag = reader.ReadInt32(); var vignetteID = reader.ReadInt32(); var title = reader.ReadEsqapedSqlString2(titleLen); var titleAlt = reader.ReadEsqapedSqlString2(titleAltLen); var cursorName = reader.ReadEsqapedSqlString2(cursorNameLen); int[] QuestItem = new int[6]; for (int i = 0; i < quest_item_count; ++i) { QuestItem[i] = reader.ReadInt32(); } if (reader.Buffer.Length != reader.Index) { Console.WriteLine(reader.Buffer.Length - reader.Index); } #endregion #region SQL writer.WriteLine("REPLACE INTO `creaturecache` VALUES (\'" + locale + "\', {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25}, {26}, {27}, {28}, {29}, {30}, {31}, {32}, {33}, {34}, {35}, {36}, {37}, {38}, {39}, {40}, {41}, {42}, {43}, {44}, {45}, {46}, {47});", entry, titleLen, titleAltLen, cursorNameLen, racialLeader, male_names_len[0], female_name_len[0], male_names_len[1], female_name_len[1], male_names_len[2], female_name_len[2], male_names_len[3], female_name_len[3], male_names[0], female_names[0], male_names[1], female_names[1], male_names[2], female_names[2], male_names[3], female_names[3], type_flags, type_flags2, type, family, rank, kill_kredit1, kill_kredit2, modelid1, modelid2, modelid3, modelid4, HealthModifier.ToString(CultureInfo.InvariantCulture), ManaModifier.ToString(CultureInfo.InvariantCulture), quest_item_count, movement_id, unk543, questFlag, vignetteID, title, titleAlt, cursorName, QuestItem[0], QuestItem[1], QuestItem[2], QuestItem[3], QuestItem[4], QuestItem[5] ); #endregion } writer.Flush(); } } Console.WriteLine("Reading {0} records", record_count); Console.WriteLine("Done!"); Console.ReadLine(); }