Exemple #1
0
        public void WriteString(Encoding encoding, StringBinaryFormat format, string value, int fixedLength = -1)
        {
            switch (format)
            {
            case StringBinaryFormat.NullTerminated:
                WriteStringNullTerminated(encoding, value);
                break;

            case StringBinaryFormat.FixedLength:
                WriteStringFixedLength(encoding, value, fixedLength);
                break;

            case StringBinaryFormat.PrefixedLength8:
                WriteStringPrefixedLength8(encoding, value);
                break;

            case StringBinaryFormat.PrefixedLength16:
                WriteStringPrefixedLength16(encoding, value);
                break;

            case StringBinaryFormat.PrefixedLength32:
                WriteStringPrefixedLength32(encoding, value);
                break;

            case StringBinaryFormat.PrefixedLength64:
                WriteStringPrefixedLength64(encoding, value);
                break;

            default:
                throw new ArgumentException("Unknown string format", nameof(format));
            }
        }
Exemple #2
0
 public void WriteStringArray(Encoding encoding, StringBinaryFormat format, string[] values, int fixedLength = -1)
 {
     for (int i = 0; i < values.Length; i++)
     {
         WriteString(encoding, format, values[i], fixedLength);
     }
 }
        public string[] ReadStrings(int count, StringBinaryFormat format, int fixedLength = -1)
        {
            string[] value = new string[count];
            for (int i = 0; i < value.Length; i++)
            {
                value[i] = ReadString(format, fixedLength);
            }

            return(value);
        }
        public string ReadStringOffset(StringBinaryFormat format = StringBinaryFormat.NullTerminated, int fixedLength = -1)
        {
            var offset = ReadInt32();

            if (offset == 0)
            {
                return(null);
            }

            return(ReadStringAtOffset(offset, format, fixedLength));
        }
        public string ReadStringAtOffset(long offset, StringBinaryFormat format, int fixedLength = -1)
        {
            if (offset == 0)
            {
                return(null);
            }

            string str = null;

            ReadAtOffset(offset, () => str = ReadString(format, fixedLength));
            return(str);
        }
        public string ReadString(StringBinaryFormat format, int fixedLength = -1)
        {
            mByteBuffer.Clear();

            switch (format)
            {
            case StringBinaryFormat.NullTerminated:
            {
                byte b;
                while ((b = ReadByte()) != 0)
                {
                    mByteBuffer.Add(b);
                }
            }
            break;

            case StringBinaryFormat.FixedLength:
            {
                if (fixedLength == -1)
                {
                    throw new ArgumentException("Invalid fixed length specified");
                }

                byte b;
                for (int i = 0; i < fixedLength; i++)
                {
                    b = ReadByte();
                    if (b != 0)
                    {
                        mByteBuffer.Add(b);
                    }
                }
            }
            break;

            case StringBinaryFormat.PrefixedLength8:
            {
                byte length = ReadByte();
                for (int i = 0; i < length; i++)
                {
                    mByteBuffer.Add(ReadByte());
                }
            }
            break;

            case StringBinaryFormat.PrefixedLength16:
            {
                ushort length = ReadUInt16();
                for (int i = 0; i < length; i++)
                {
                    mByteBuffer.Add(ReadByte());
                }
            }
            break;

            case StringBinaryFormat.PrefixedLength32:
            {
                uint length = ReadUInt32();
                for (int i = 0; i < length; i++)
                {
                    mByteBuffer.Add(ReadByte());
                }
            }
            break;

            default:
                throw new ArgumentException("Unknown string format", nameof(format));
            }

            return(mEncoding.GetString(mByteBuffer.ToArray()));
        }
 public void WriteStringArrayOffset(Encoding encoding, StringBinaryFormat format, string[] value, int fixedLength = -1, int alignment = 0)
 {
     mCmdQueue.Enqueue(new WriteOffsetCmd(Position, OffsetHandler.OffsetOrigin, alignment, value, value, false,
                                          (w, v) => w.WriteStringArray(encoding, format, ( string[] )v, fixedLength)));
     WriteOffsetValue(PLACEHOLDER_OFFSET);
 }
        public void Write(string value, StringBinaryFormat format, int fixedLength = -1)
        {
            switch (format)
            {
            case StringBinaryFormat.NullTerminated:
            {
                Write(mEncoding.GetBytes(value));

                for (int i = 0; i < mEncoding.GetMaxByteCount(1); i++)
                {
                    Write((byte)0);
                }
            }
            break;

            case StringBinaryFormat.FixedLength:
            {
                if (fixedLength == -1)
                {
                    throw new ArgumentException("Fixed length must be provided if format is set to fixed length", nameof(fixedLength));
                }

                var bytes = mEncoding.GetBytes(value);
                if (bytes.Length > fixedLength)
                {
                    throw new ArgumentException("Provided string is longer than fixed length", nameof(value));
                }

                Write(bytes);
                fixedLength -= bytes.Length;

                while (fixedLength-- > 0)
                {
                    Write((byte)0);
                }
            }
            break;

            case StringBinaryFormat.PrefixedLength8:
            {
                Write((byte)value.Length);
                Write(mEncoding.GetBytes(value));
            }
            break;

            case StringBinaryFormat.PrefixedLength16:
            {
                Write((ushort)value.Length);
                Write(mEncoding.GetBytes(value));
            }
            break;

            case StringBinaryFormat.PrefixedLength32:
            {
                Write((uint)value.Length);
                Write(mEncoding.GetBytes(value));
            }
            break;

            default:
                throw new ArgumentException("Invalid format specified", nameof(format));
            }
        }
Exemple #9
0
 public void WriteString(string value, StringBinaryFormat format, int fixedLength = -1) => Write(value, format, fixedLength);
Exemple #10
0
 public void WriteStringArray(StringBinaryFormat format, string[] values, int fixedLength = -1)
 => WriteStringArray(Encoding, format, values, fixedLength);
Exemple #11
0
 public void WriteString(StringBinaryFormat format, string value, int fixedLength = -1)
 => WriteString(Encoding, format, value, fixedLength);
 public string[] ReadStringListAtOffset(long offset, int count, StringBinaryFormat format, int fixedLength = -1)
 {
     string[] str = null;
     ReadAtOffset(offset, () => str = ReadStrings(count, format, fixedLength));
     return(str);
 }