예제 #1
0
        /// <summary>
        /// Write utf-8 string
        /// </summary>
        /// <param name="val">string</param>
        /// <param name="strPrefixByteLen">string prefix byte len</param>
        /// <param name="isWriteEndChar">is Write End Char</param>
        /// <param name="isPrefixContainEndCharByteLen">is Prefix Contain EndChar Byte Len</param>
        /// <returns>bool</returns>
        public bool WriteUTF8(string val, EStringPrefixLen strPrefixByteLen = EStringPrefixLen.Int32,
                              bool isWriteEndChar = true, bool isPrefixContainEndCharByteLen = true)
        {
            if (!isWriteEndChar)
            {
                isPrefixContainEndCharByteLen = false;
            }

            byte[] buf = new byte[0];
            if (!string.IsNullOrEmpty(val))
            {
                buf = Encoding.UTF8.GetBytes(val);
            }

            int prefixVal = buf.Length;

            if (isWriteEndChar && isPrefixContainEndCharByteLen)
            {
                prefixVal += 1;
            }
            int len = (int)strPrefixByteLen + buf.Length;

            if (isWriteEndChar)
            {
                len += 1;
            }

            if (ms.AvaliableWrite() >= len)
            {
                switch (strPrefixByteLen)
                {
                case EStringPrefixLen.Byte:
                    WriteByte((byte)prefixVal);
                    break;

                case EStringPrefixLen.Int16:
                    WriteUInt16((UInt16)prefixVal);
                    break;

                case EStringPrefixLen.Int32:
                    WriteUInt32((UInt32)prefixVal);
                    break;

                case EStringPrefixLen.Int64:
                    WriteUInt64((UInt64)prefixVal);
                    break;
                }

                ms.Write(buf, 0, buf.Length);

                if (isWriteEndChar)
                {
                    WriteByte(0);
                }

                return(true);
            }

            return(false);
        }
예제 #2
0
        /// <summary>
        /// Get String Byte Count
        /// </summary>
        /// <param name="str">str</param>
        /// <param name="encode">encode</param>
        /// <param name="prefix">prefix</param>
        /// <param name="hasEndChar">has EndChar</param>
        /// <returns></returns>
        public static int GetStringByteCount(string str, Encoding encode,
                                             EStringPrefixLen prefix = EStringPrefixLen.Int32, bool hasEndChar = true)
        {
            int count = (int)prefix;

            if (!string.IsNullOrEmpty(str))
            {
                count += encode.GetByteCount(str);
            }

            if (hasEndChar)
            {
                count += GetStringEndCharByteLength(encode);
            }

            return(count);
        }
예제 #3
0
        /// <summary>
        /// Read UTF-8 string
        /// </summary>
        /// <param name="strPrefixByteLen">string prefix byte len</param>
        /// <param name="hasEndChar">has EndChar</param>
        /// <param name="isPrefixContainEndCharByteLen">is Prefix Contain EndChar Byte Len</param>
        /// <returns>string</returns>
        public string ReadUTF8Prefix(EStringPrefixLen strPrefixByteLen = EStringPrefixLen.Int32,
                                     bool hasEndChar = true, bool isPrefixContainEndCharByteLen = true)
        {
            string result = "";

            if (!hasEndChar)
            {
                isPrefixContainEndCharByteLen = false;
            }

            int len = 0;

            switch (strPrefixByteLen)
            {
            case EStringPrefixLen.Byte:
                len = ReadByte();
                break;

            case EStringPrefixLen.Int16:
                len = ReadUInt16();
                break;

            case EStringPrefixLen.Int32:
                len = (int)ReadUInt32();
                break;

            case EStringPrefixLen.Int64:
                len = (int)ReadUInt64();
                break;
            }

            if (hasEndChar && !isPrefixContainEndCharByteLen)
            {
                len += 1;
            }

            if (ms.AvaliableRead() >= len)
            {
                result = ReadUTF8(len);
            }

            return(result);
        }
예제 #4
0
 /// <summary>
 /// Get String Byte Count
 /// </summary>
 /// <param name="str">str</param>
 /// <param name="prefix">prefix</param>
 /// <param name="hasEndChar">has EndChar</param>
 /// <returns></returns>
 public static int GetStringByteCount(string str,
                                      EStringPrefixLen prefix = EStringPrefixLen.Int32, bool hasEndChar = true)
 {
     return(GetStringByteCount(str, Encoding.UTF8, prefix, hasEndChar));
 }