From 12281ec8020dfad274a84ece094eee60ef5b4940 Mon Sep 17 00:00:00 2001 From: Serge Camille Date: Mon, 4 Oct 2021 18:59:05 +0200 Subject: [PATCH] Fix ReadClass for Uint32 Use consistent DWord conversion for both Int32 and UInt32. Unfortunately there is no Span or even a FromByteArray function accepting a offset, so just use the same Array.Copy falls used for double. --- S7.Net/Types/Class.cs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/S7.Net/Types/Class.cs b/S7.Net/Types/Class.cs index 0dd78fa..225f3f8 100644 --- a/S7.Net/Types/Class.cs +++ b/S7.Net/Types/Class.cs @@ -153,11 +153,9 @@ namespace S7.Net.Types numBytes = Math.Ceiling(numBytes); if ((numBytes / 2 - Math.Floor(numBytes / 2.0)) > 0) 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; @@ -165,12 +163,9 @@ namespace S7.Net.Types numBytes = Math.Ceiling(numBytes); if ((numBytes / 2 - Math.Floor(numBytes / 2.0)) > 0) 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":