Skip to content

Commit

Permalink
Merge pull request #415 from scamille/fb-fixClassUint32
Browse files Browse the repository at this point in the history
Fix ReadClass for UInt32
  • Loading branch information
mycroes authored Dec 10, 2022
2 parents 3833d29 + 868e719 commit 6aa0133
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
18 changes: 18 additions & 0 deletions S7.Net.UnitTest/TypeTests/ClassTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,19 @@ public void GetClassSizeTest()
Assert.AreEqual(Class.GetClassSize(new TestClassUnevenSize(3, 17)), 10);
}

/// <summary>
/// Ensure Uint32 is correctly parsed through ReadClass functions. Adresses issue https://github.com/S7NetPlus/s7netplus/issues/414
/// </summary>
[TestMethod]
public void TestUint32Read()
{
var result = new TestUint32();
var data = new byte[4] { 0, 0, 0, 5 };
var bytesRead = Class.FromBytes(result, data);
Assert.AreEqual(bytesRead, data.Length);
Assert.AreEqual(5u, result.Value1);
}

private class TestClassUnevenSize
{
public bool Bool { get; set; }
Expand All @@ -29,5 +42,10 @@ public TestClassUnevenSize(int byteCount, int bitCount)
Bools = new bool[bitCount];
}
}

private class TestUint32
{
public uint Value1 { get; set; }
}
}
}
17 changes: 6 additions & 11 deletions S7.Net/Types/Class.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,22 +148,17 @@ public static double GetClassSize(object instance, double numBytes = 0.0, bool i
break;
case "Int32":
IncrementToEven(ref numBytes);
// hier auswerten
uint sourceUInt = DWord.FromBytes(bytes[(int)numBytes + 3],
bytes[(int)numBytes + 2],
bytes[(int)numBytes + 1],
bytes[(int)numBytes + 0]);
var wordBuffer = new byte[4];
Array.Copy(bytes, (int)numBytes, wordBuffer, 0, wordBuffer.Length);
uint sourceUInt = DWord.FromByteArray(wordBuffer);
value = sourceUInt.ConvertToInt();
numBytes += 4;
break;
case "UInt32":
IncrementToEven(ref numBytes);
// hier auswerten
value = DWord.FromBytes(
bytes[(int)numBytes],
bytes[(int)numBytes + 1],
bytes[(int)numBytes + 2],
bytes[(int)numBytes + 3]);
var wordBuffer2 = new byte[4];
Array.Copy(bytes, (int)numBytes, wordBuffer2, 0, wordBuffer2.Length);
value = DWord.FromByteArray(wordBuffer2);
numBytes += 4;
break;
case "Single":
Expand Down

0 comments on commit 6aa0133

Please sign in to comment.