Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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