예제 #1
0
        public override void WriteValue(EndianWriter writer)
        {
            writer.Seek(ValueAddress, SeekOrigin.Begin);
            writer.WriteStringFixedLength(Value, Length, '\0');

            IsDirty = false;
        }
예제 #2
0
        //null header indicates the data should be written as-is
        public static void WriteRiffData(Stream output, IFormatHeader header, byte[] data)
        {
            using (var sw = new EndianWriter(output, ByteOrder.LittleEndian))
            {
                if (header == null)
                {
                    sw.Write(data);
                    return;
                }

                sw.WriteStringFixedLength("RIFF");
                sw.Write(data.Length + header.Length + 20); //20 is the combined size of strings length ints
                sw.WriteStringFixedLength("WAVE");
                sw.WriteStringFixedLength("fmt ");
                sw.Write(header.Length);
                sw.Write(header.GetBytes());
                sw.WriteStringFixedLength("data");
                sw.Write(data.Length);
                sw.Write(data);
            }
        }
예제 #3
0
        public override void WriteValue(EndianWriter writer)
        {
            writer.Seek(ValueAddress, SeekOrigin.Begin);

            if (FieldDefinition.ValueType == MetaValueType.StringId)
            {
                throw new NotImplementedException();
            }
            else
            {
                writer.WriteStringFixedLength(Value, Length);
            }

            IsDirty = false;
        }
예제 #4
0
        public void ReadStrings01(ByteOrder order, bool dynamicRead)
        {
            var value1 = "Length_Prefixed_String_#01!";
            var value2 = "Fixed_Length_String_#01!";
            var value3 = "Null_Terminated_String_#01!";

            using (var stream = new MemoryStream(new byte[500]))
                using (var reader = new EndianReader(stream, order))
                    using (var writer = new EndianWriter(stream, order))
                    {
                        reader.DynamicReadEnabled = dynamicRead;
                        writer.Write(value1);

                        stream.Position = 0x20;
                        writer.WriteStringFixedLength(value2, 32);

                        stream.Position = 0x40;
                        writer.WriteStringNullTerminated(value3);

                        stream.Position = 0x60;
                        writer.Write(value1, ByteOrder.LittleEndian);

                        stream.Position = 0x80;
                        writer.Write(value1, ByteOrder.BigEndian);

                        stream.Position = 0;
                        var obj = reader.ReadObject <DataClass05>();

                        Assert.AreEqual(value1, obj.Property1);

                        Assert.AreEqual(value2, obj.Property2);

                        Assert.AreEqual(32, obj.Property3.Length);
                        Assert.IsTrue(obj.Property3.StartsWith(value2));

                        Assert.AreEqual(value3, obj.Property4);
                        Assert.AreEqual(value3, obj.Property5);

                        Assert.AreEqual(value1, obj.Property6);
                        Assert.AreEqual(value1, obj.Property7);
                    }
        }
예제 #5
0
        public void FixedLength(ByteOrder order)
        {
            var value1 = "Fixed_Length_String_#01!";

            using (var stream = new MemoryStream(new byte[32]))
                using (var reader = new EndianReader(stream, order))
                    using (var writer = new EndianWriter(stream, order))
                    {
                        writer.WriteStringFixedLength(value1, 32);
                        Assert.AreEqual(32, stream.Position);

                        stream.Position = 0;
                        var value2 = reader.ReadString(32, true);
                        Assert.AreEqual(32, stream.Position);
                        Assert.AreEqual(value1, value2);

                        stream.Position = 0;
                        value2          = reader.ReadString(32, false);
                        Assert.AreEqual(32, value2.Length);
                        Assert.IsTrue(value2.StartsWith(value1));
                    }
        }