public static byte[] ToBytes(HFormat format, string signature) { MatchCollection matches = _structurePattern.Matches(signature); if (matches.Count == 0) { for (int i = 0; i <= 13; i++) { signature = signature.Replace(("[" + i + "]"), ((char)i).ToString()); } return(Encoding.Default.GetBytes(signature)); } else { ushort id = 0; var values = new List <object>(matches.Count); foreach (Match match in matches) { string value = match.Groups["value"].Value; string kind = match.Groups["kind"].Value.ToLower(); switch (kind) { case "id": { if (!ushort.TryParse(value, out id)) { throw new ArgumentException("Unable to locate the '{id:N}' parameter.", nameof(signature)); } break; } case "i": values.Add(int.Parse(value)); break; case "s": values.Add(value); break; case "b": { byte bValue = 0; value = value.Trim().ToLower(); if (!byte.TryParse(value, out bValue)) { values.Add(value == "true"); } else { values.Add(bValue); } break; } case "d": values.Add(double.Parse(value)); break; case "u": values.Add(ushort.Parse(value)); break; } } return(format.Construct(id, values.ToArray())); } }
public HPacket(HFormat resolver, IList <byte> data) : this(resolver) { _body.AddRange(resolver.GetBody(data)); _toBytesCache = new byte[data.Count]; data.CopyTo(_toBytesCache, 0); Id = resolver.GetId(data); }
public HPacket(HFormat resolver) { _body = new List <byte>(); Format = resolver; }