This is an automated email from the ASF dual-hosted git repository. sruehl pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit 810d649f4912c5f720f44f6aed41440a7b99fb27 Author: Sebastian Rühl <sru...@apache.org> AuthorDate: Thu Jul 26 17:11:00 2018 +0200 fixed double implementation in S7 --- .../plc4x/java/s7/netty/util/S7TypeEncoder.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeEncoder.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeEncoder.java index 4ff0f4b..19f9af6 100644 --- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeEncoder.java +++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/util/S7TypeEncoder.java @@ -49,6 +49,8 @@ public class S7TypeEncoder { throw new PlcNotImplementedException("calender not yet implemented in s7"); } else if (valueType == Float.class) { result = encodeFloat(values, length); + } else if (valueType == Double.class) { + result = encodeDouble(values, length); } else if (valueType == String.class) { result = encodeString(values, length); } else { @@ -89,6 +91,24 @@ public class S7TypeEncoder { return result; } + public static byte[] encodeDouble(Object[] values, int length) { + byte[] result; + result = new byte[length * 8]; + for (int i = 0; i < length; i++) { + double doubleValue = (double) values[i]; + long longValue = Double.doubleToLongBits(doubleValue); + result[(i * 8)] = (byte) ((longValue & 0xFF000000_00000000L) >> 56); + result[(i * 8) + 1] = (byte) ((longValue & 0x00FF0000_00000000L) >> 48); + result[(i * 8) + 2] = (byte) ((longValue & 0x0000FF00_00000000L) >> 40); + result[(i * 8) + 3] = (byte) ((longValue & 0x000000FF_00000000L) >> 32); + result[(i * 8) + 4] = (byte) ((longValue & 0x00000000_FF000000L) >> 24); + result[(i * 8) + 5] = (byte) ((longValue & 0x00000000_00FF0000L) >> 16); + result[(i * 8) + 6] = (byte) ((longValue & 0x00000000_0000FF00L) >> 8); + result[(i * 8) + 7] = (byte) (longValue & 0x00000000_000000FFL); + } + return result; + } + public static byte[] encodeInteger(Object[] values, int length) { byte[] result; result = new byte[length * 4];