示例#1
0
        public int Get(int tag, string value, MessageEncoding encoder, Span <byte> into)
        {
            var encode        = encoder.GetEncoder();
            var currentOffset = IntegerToFixConverter.Instance.Convert(tag, into);
            int result        = currentOffset;

            into          = into.Slice(currentOffset);
            into[0]       = Constants.EqualsByte;
            into          = into.Slice(1);
            currentOffset = encode.GetBytes(value, into);
            result       += currentOffset;
            into          = into.Slice(currentOffset);
            into[0]       = Constants.SOHByte;
            return(result + 2);
        }
示例#2
0
        public MessageBuilder AddTag(int tag, string value, MessageEncoding encoding)
        {
            if (_encoding == null)
            {
                _encoding = encoding;
            }
            else if (_encoding != encoding)
            {
                throw new InvalidOperationException("Encoding is already set");
            }

            int expectedLength = (int)Math.Floor(Math.Log10(tag) + 1) + encoding.GetEncoder().GetByteCount(value) + 2;

            EnsureSize(expectedLength);
            _currentLength += _converter.Get(tag, value, encoding, _builderArray.AsSpan(_currentLength));
            return(this);
        }