コード例 #1
0
ファイル: BinHelperTest.cs プロジェクト: BahaBulle/jHackson
        public void ShouldGiveBytesFromUshortLittleEndian()
        {
            ushort value  = 0x2552;
            var    result = new List <byte>();

            foreach (var b in BinHelper.GetBytes(value, EnumEndianType.LittleEndian))
            {
                result.Add(b);
            }

            Assert.That(0x52, Is.EqualTo(result[0]));
            Assert.That(0x25, Is.EqualTo(result[1]));
        }
コード例 #2
0
ファイル: BinHelperTest.cs プロジェクト: BahaBulle/jHackson
        public void ShouldGiveBytesFromUintBigEndian()
        {
            uint value  = 0x25523441;
            var  result = new List <byte>();

            foreach (var b in BinHelper.GetBytes(value, EnumEndianType.BigEndian))
            {
                result.Add(b);
            }

            Assert.That(0x25, Is.EqualTo(result[0]));
            Assert.That(0x52, Is.EqualTo(result[1]));
            Assert.That(0x34, Is.EqualTo(result[2]));
            Assert.That(0x41, Is.EqualTo(result[3]));
        }
コード例 #3
0
ファイル: BinHelperTest.cs プロジェクト: BahaBulle/jHackson
        public void ShouldGiveBytesFromUlongLittleEndian()
        {
            ulong value  = 0x25523441ABDECF90;
            var   result = new List <byte>();

            foreach (var b in BinHelper.GetBytes(value, EnumEndianType.LittleEndian))
            {
                result.Add(b);
            }

            Assert.That(0x90, Is.EqualTo(result[0]));
            Assert.That(0xCF, Is.EqualTo(result[1]));
            Assert.That(0xDE, Is.EqualTo(result[2]));
            Assert.That(0xAB, Is.EqualTo(result[3]));
            Assert.That(0x41, Is.EqualTo(result[4]));
            Assert.That(0x34, Is.EqualTo(result[5]));
            Assert.That(0x52, Is.EqualTo(result[6]));
            Assert.That(0x25, Is.EqualTo(result[7]));
        }
コード例 #4
0
ファイル: ActionBinModify.cs プロジェクト: BahaBulle/jHackson
        /// <summary>
        /// Execute the process of this action.
        /// </summary>
        public override void Execute()
        {
            if (this.Title != null)
            {
                Logger.Info(this.Title);
            }

            var msDest = this.Context.Buffers.Get <MemoryStream>(this.To.Value, true);

            using (var binaryWriter = new BinaryWriter(msDest, Encoding.Default, true))
            {
                foreach (var data in this.DataParameters)
                {
                    binaryWriter.Seek((int)data.Adress.Value, data.Adress.Origin);

                    switch (data.Type)
                    {
                    case EnumDataType.Array8:
                        byte[] bytesValue = ((JArray)data.Value).ToObject <byte[]>();
                        binaryWriter.Write(bytesValue);
                        break;

                    case EnumDataType.Array16:
                        ushort[] shortArray = ((JArray)data.Value).ToObject <ushort[]>();
                        foreach (ushort value in shortArray)
                        {
                            foreach (byte b in BinHelper.GetBytes(value, data.Endian))
                            {
                                binaryWriter.Write(b);
                            }
                        }

                        break;

                    case EnumDataType.Array32:
                        uint[] uintArray = ((JArray)data.Value).ToObject <uint[]>();
                        foreach (uint value in uintArray)
                        {
                            foreach (byte b in BinHelper.GetBytes(value, data.Endian))
                            {
                                binaryWriter.Write(b);
                            }
                        }

                        break;

                    case EnumDataType.Array64:
                        ulong[] ulongArray = ((JArray)data.Value).ToObject <ulong[]>();
                        foreach (ulong value in ulongArray)
                        {
                            foreach (byte b in BinHelper.GetBytes(value, data.Endian))
                            {
                                binaryWriter.Write(b);
                            }
                        }

                        break;

                    case EnumDataType.U8:
                        byte byteValue = Convert.ToByte(data.Value, CultureInfo.CurrentCulture);
                        binaryWriter.Write(byteValue);
                        break;

                    case EnumDataType.U16:
                        ushort ushortValue = Convert.ToUInt16(data.Value, CultureInfo.CurrentCulture);
                        foreach (byte b in BinHelper.GetBytes(ushortValue, data.Endian))
                        {
                            binaryWriter.Write(b);
                        }

                        break;

                    case EnumDataType.U32:
                        uint uintValue = Convert.ToUInt32(data.Value, CultureInfo.CurrentCulture);
                        foreach (byte b in BinHelper.GetBytes(uintValue, data.Endian))
                        {
                            binaryWriter.Write(b);
                        }

                        break;

                    case EnumDataType.U64:
                        ulong ulongValue = Convert.ToUInt64(data.Value, CultureInfo.CurrentCulture);
                        foreach (byte b in BinHelper.GetBytes(ulongValue, data.Endian))
                        {
                            binaryWriter.Write(b);
                        }

                        break;

                    case EnumDataType.Str:
                        binaryWriter.Write(((string)data.Value).ToCharArray());
                        break;
                    }
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// Execute the process of this action.
        /// </summary>
        public override void Execute()
        {
            if (this.Title != null)
            {
                Logger.Info(this.Title);
            }

            var msSource = this.Context.Buffers.Get <MemoryStream>(this.To.Value, true);
            var msDest   = new MemoryStream();

            msSource.Position = 0;

            byte[] bytes;
            using (var binaryReader = new BinaryReader(msSource))
                using (var binaryWriter = new BinaryWriter(msDest, Encoding.Default, true))
                {
                    long position = 0;

                    foreach (var data in this.DataParameters.OrderBy(x => x.Adress))
                    {
                        bytes    = binaryReader.ReadBytes((int)data.Adress.Value - (int)position);
                        position = data.Adress.Value;

                        binaryWriter.Write(bytes, 0, (int)data.Adress.Value);

                        switch (data.Type)
                        {
                        case EnumDataType.Array8:
                            byte[] byteArray = ((JArray)data.Value).ToObject <byte[]>();
                            binaryWriter.Write(byteArray);
                            break;

                        case EnumDataType.Array16:
                            ushort[] ushortArray = ((JArray)data.Value).ToObject <ushort[]>();
                            foreach (ushort value in ushortArray)
                            {
                                foreach (byte b in BinHelper.GetBytes(value, data.Endian))
                                {
                                    binaryWriter.Write(b);
                                }
                            }

                            break;

                        case EnumDataType.Array32:
                            uint[] uintArray = ((JArray)data.Value).ToObject <uint[]>();
                            foreach (uint value in uintArray)
                            {
                                foreach (byte b in BinHelper.GetBytes(value, data.Endian))
                                {
                                    binaryWriter.Write(b);
                                }
                            }

                            break;

                        case EnumDataType.Array64:
                            ulong[] ulongArray = ((JArray)data.Value).ToObject <ulong[]>();
                            foreach (ulong value in ulongArray)
                            {
                                foreach (byte b in BinHelper.GetBytes(value, data.Endian))
                                {
                                    binaryWriter.Write(b);
                                }
                            }

                            break;

                        case EnumDataType.U8:
                            byte byteValue = Convert.ToByte(data.Value, CultureInfo.CurrentCulture);
                            binaryWriter.Write(byteValue);
                            break;

                        case EnumDataType.U16:
                            ushort ushortValue = Convert.ToUInt16(data.Value, CultureInfo.CurrentCulture);
                            foreach (byte b in BinHelper.GetBytes(ushortValue, data.Endian))
                            {
                                binaryWriter.Write(b);
                            }

                            break;

                        case EnumDataType.U32:
                            uint uintValue = Convert.ToUInt32(data.Value, CultureInfo.CurrentCulture);
                            foreach (byte b in BinHelper.GetBytes(uintValue, data.Endian))
                            {
                                binaryWriter.Write(b);
                            }

                            break;

                        case EnumDataType.U64:
                            ulong ulongValue = Convert.ToUInt64(data.Value, CultureInfo.CurrentCulture);
                            foreach (byte b in BinHelper.GetBytes(ulongValue, data.Endian))
                            {
                                binaryWriter.Write(b);
                            }

                            break;

                        case EnumDataType.Str:
                            binaryWriter.Write(((string)data.Value).ToCharArray());
                            break;
                        }
                    }

                    int size = (int)binaryReader.BaseStream.Length - (int)position;
                    bytes = binaryReader.ReadBytes(size);

                    binaryWriter.Write(bytes, 0, size);

                    this.Context.Buffers.Add(this.To.Value, msDest);
                }
        }