/// <summary> /// Converts a S7 DInt to double /// </summary> public static double FromDWord(Int32 value) { byte[] b = DInt.ToByteArray(value); double d = FromByteArray(b); return(d); }
/// <summary> /// Converts a S7 DInt to float /// </summary> public static float FromDWord(Int32 value) { byte[] b = DInt.ToByteArray(value); float d = FromByteArray(b); return(d); }
private static double SetBytesFromProperty(object propertyValue, byte[] bytes, double numBytes) { int bytePos = 0; int bitPos = 0; byte[] bytes2 = null; switch (propertyValue.GetType().Name) { case "Boolean": // get the value bytePos = (int)Math.Floor(numBytes); bitPos = (int)((numBytes - (double)bytePos) / 0.125); if ((bool)propertyValue) { bytes[bytePos] |= (byte)Math.Pow(2, bitPos); // is true } else { bytes[bytePos] &= (byte)(~(byte)Math.Pow(2, bitPos)); // is false } numBytes += 0.125; break; case "Byte": numBytes = (int)Math.Ceiling(numBytes); bytePos = (int)numBytes; bytes[bytePos] = (byte)propertyValue; numBytes++; break; case "Int16": bytes2 = Int.ToByteArray((Int16)propertyValue); break; case "UInt16": bytes2 = Word.ToByteArray((UInt16)propertyValue); break; case "Int32": bytes2 = DInt.ToByteArray((Int32)propertyValue); break; case "UInt32": bytes2 = DWord.ToByteArray((UInt32)propertyValue); break; case "Double": bytes2 = Double.ToByteArray((double)propertyValue); break; case "Single": bytes2 = Single.ToByteArray((float)propertyValue); break; default: numBytes = ToBytes(propertyValue, bytes, numBytes); break; } if (bytes2 != null) { // add them numBytes = Math.Ceiling(numBytes); if ((numBytes / 2 - Math.Floor(numBytes / 2.0)) > 0) { numBytes++; } bytePos = (int)numBytes; for (int bCnt = 0; bCnt < bytes2.Length; bCnt++) { bytes[bytePos + bCnt] = bytes2[bCnt]; } numBytes += bytes2.Length; } return(numBytes); }