public static RemoteXControlMessage[] FromBytes(byte[] controlMessagesBytes) { int currPos = 0; List <RemoteXControlMessage> controlMessages = new List <RemoteXControlMessage>(); int beginPos = 0; int loopCount = 0; while (beginPos < controlMessagesBytes.Length) { currPos = beginPos; char possibleBeginChar = BitConverter.ToChar(controlMessagesBytes, currPos); if (possibleBeginChar != BEGIN_CHAR) { beginPos++; continue; } currPos += sizeof(char); //=============================================================== int dataType = BitConverter.ToInt32(controlMessagesBytes, currPos); currPos += sizeof(int); //================================================================ int valueCount = BitConverter.ToInt32(controlMessagesBytes, currPos); currPos += sizeof(int); //================================================================ float[] sensorData = new float[valueCount]; for (int i = 0; i < valueCount; i++) { sensorData[i] = BitConverter.ToSingle(controlMessagesBytes, currPos + sizeof(float) * i); } currPos += valueCount * sizeof(float); //=============================================================== char possibleEndChar = BitConverter.ToChar(controlMessagesBytes, currPos); if (possibleEndChar != END_CHAR) { beginPos++; continue; } currPos += sizeof(char); beginPos = currPos; RemoteXControlMessage controlMessage = new RemoteXControlMessage(dataType, sensorData); controlMessages.Add(controlMessage); loopCount++; } if (loopCount > 1) { System.Diagnostics.Debug.WriteLine("LOOP COUNT: " + loopCount); } return(controlMessages.ToArray()); }
public static RemoteXControlMessage FromString(string sControlMessage) { string[] tempSs = sControlMessage.Split('|'); sControlMessage = sControlMessage.Remove(0, 1); sControlMessage = sControlMessage.Remove(sControlMessage.Length - 1, 1); string[] sTypeAndData = sControlMessage.Split('|'); string sType = sTypeAndData[0]; sType = sType.Remove(0, 5); sType = sType.Trim(); int type = int.Parse(sType); string sDataOnly = sTypeAndData[1].Remove(0, 7); sDataOnly = sDataOnly.Replace(" ", ""); string[] sFloatDatas = sDataOnly.Split(','); float[] values = new float[sFloatDatas.Length]; for (int i = 0; i < values.Length; i++) { values[i] = float.Parse(sFloatDatas[i]); } RemoteXControlMessage restoredData = new RemoteXControlMessage(type, values); return(restoredData); }