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])); }
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])); }
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])); }
/// <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; } } } }
/// <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); } }