private void AddFormat(ref byte[] datum) { //Get Format and Length part's Length byte byteFormat = datum[0]; int iLenAddrLength = byteFormat & 0x3; HComEnums.ItemFormat itemFormat = (HComEnums.ItemFormat)(byteFormat >> 2 & 0x3F); datum = datum.Skip(1).ToArray(); //Get Data Length byte[] byteLength = new byte[4]; for (int i = 0; i < iLenAddrLength; i++) { byteLength[i] = datum[i]; } datum = datum.Skip(iLenAddrLength).ToArray(); int iLength = BitConverter.ToInt32(byteLength, 0); //Get Data MessageItem mi = null; if (itemFormat == HComEnums.ItemFormat.L) { mi = new MessageItem("", iLength); } else { mi = MessageItem.MakeMessageItem(itemFormat, ref datum, iLength); } AppendXML(mi); }
//For All type but List. From Remote public static MessageItem MakeMessageItem(HComEnums.ItemFormat type, ref byte[] bytes, int len) { MessageItem mi = new MessageItem(); mi.type = type; mi.name = ""; object formatValue = null; switch (type) { case HComEnums.ItemFormat.A: formatValue = Encoding.ASCII.GetString(bytes, 0, len); mi.len = len; break; case HComEnums.ItemFormat.B: formatValue = bytes[0]; mi.len = 1; break; case HComEnums.ItemFormat.Bool: formatValue = bytes[0] > 0 ? true : false; mi.len = 1; break; case HComEnums.ItemFormat.F4: formatValue = BitConverter.ToSingle(bytes.Take(4).Reverse().ToArray(), 0); mi.len = 4; break; case HComEnums.ItemFormat.F8: formatValue = BitConverter.ToDouble(bytes.Take(8).Reverse().ToArray(), 0); mi.len = 8; break; case HComEnums.ItemFormat.I1: formatValue = (sbyte)BitConverter.ToChar(bytes, 0); mi.len = 1; break; case HComEnums.ItemFormat.I2: formatValue = BitConverter.ToInt16(bytes.Take(2).Reverse().ToArray(), 0); mi.len = 2; break; case HComEnums.ItemFormat.I4: formatValue = BitConverter.ToInt32(bytes.Take(4).Reverse().ToArray(), 0); mi.len = 4; break; case HComEnums.ItemFormat.I8: formatValue = BitConverter.ToInt64(bytes.Take(8).Reverse().ToArray(), 0); mi.len = 8; break; case HComEnums.ItemFormat.JIS: formatValue = Encoding.ASCII.GetString(bytes, 0, len); mi.len = len; break; case HComEnums.ItemFormat.L: break; case HComEnums.ItemFormat.U1: formatValue = bytes[0]; mi.len = 1; break; case HComEnums.ItemFormat.U2: formatValue = BitConverter.ToUInt16(bytes.Take(2).Reverse().ToArray(), 0); mi.len = 2; break; case HComEnums.ItemFormat.U4: formatValue = BitConverter.ToUInt32(bytes.Take(4).Reverse().ToArray(), 0); mi.len = 4; break; case HComEnums.ItemFormat.U8: formatValue = BitConverter.ToUInt64(bytes.Take(8).Reverse().ToArray(), 0); mi.len = 8; break; case HComEnums.ItemFormat.W: formatValue = BitConverter.ToUInt16(bytes.Take(2).Reverse().ToArray(), 0); mi.len = 2; break; } mi.value = formatValue; bytes = bytes.Skip(mi.len).ToArray(); return(mi); }
private bool AddFormat(int length, HComEnums.ItemFormat itemFormat) { HComEnums.NumberOfLengthByte lengthByte = GetNumberOfLengthByte(length); if (lengthByte == HComEnums.NumberOfLengthByte.Overbound) { return(false); } byte ret = (byte)((byte)itemFormat << 2 | (byte)lengthByte); msgData.Add(ret); for (byte b = (byte)lengthByte; b > 0; b--) { byte retLen = (byte)(length >> (b - 1) * 8 & 0xFF); msgData.Add(retLen); } return(true); }
//For List Type public MessageItem(string name, int len) { this.type = HComEnums.ItemFormat.L; this.name = name; this.len = len; }
//For All type but List public MessageItem(HComEnums.ItemFormat type, string name, object value) { this.type = type; this.name = name; this.value = value; }