public void WriteBase(SubStringStruct value)
 {
     if (value.Length != 0)
     {
         var length = value.Length << 1;
         PrepLengthBase(length);
         fixed (char* valueFixed = value.Value)
             MemoryUnsafe.Copy(valueFixed + value.StartIndex, Data + LengthBase, length);
         LengthBase += length;
     }
 }
 ///// <summary>
 ///// 模拟javascript解码函数unescape
 ///// </summary>
 ///// <param name="value">原字符串</param>
 ///// <returns>unescape解码后的字符串</returns>
 //public static unsafe string JavascriptUnescape(string value)
 //{
 //    if (value != null)
 //    {
 //        fixed (char* valueFixed = value)
 //        {
 //            char* start = valueFixed, end = valueFixed + value.Length;
 //            while (start != end && *start != '%')
 //            {
 //                if (*start == 0) *start = ' ';
 //                ++start;
 //            }
 //            if (start != end)
 //            {
 //                char* write = start;
 //                do
 //                {
 //                    if (*++start == 'u')
 //                    {
 //                        uint code = (uint)(*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
 //                        code <<= 4;
 //                        code += (uint)(*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
 //                        code <<= 4;
 //                        code += (uint)(*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
 //                        code <<= 4;
 //                        code += (uint)(*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
 //                        *write++ = code != 0 ? (char)code : ' ';
 //                    }
 //                    else
 //                    {
 //                        uint code = (uint)(*start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
 //                        code <<= 4;
 //                        code += (uint)(*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
 //                        *write++ = code != 0 ? (char)code : ' ';
 //                    }
 //                    while (++start < end && *start != '%') *write++ = *start != 0 ? *start : ' ';
 //                }
 //                while (start < end);
 //                return new string(valueFixed, 0, (int)(write - valueFixed));
 //            }
 //        }
 //    }
 //    return value;
 //}
 /// <summary>
 ///     模拟javascript解码函数unescape
 /// </summary>
 /// <param name="value">原字符串</param>
 /// <returns>unescape解码后的字符串</returns>
 internal static unsafe SubStringStruct JavascriptUnescape(SubStringStruct value)
 {
     if (value.Length != 0)
     {
         fixed (char* valueFixed = value.Value)
         {
             char* start = valueFixed + value.StartIndex, end = start + value.Length;
             while (start != end && *start != '%')
             {
                 if (*start == 0) *start = ' ';
                 ++start;
             }
             if (start != end)
             {
                 var write = start;
                 do
                 {
                     if (*++start == 'u')
                     {
                         var code =
                             (uint)
                                 (*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
                         code <<= 4;
                         code +=
                             (uint)
                                 (*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
                         code <<= 4;
                         code +=
                             (uint)
                                 (*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
                         code <<= 4;
                         code +=
                             (uint)
                                 (*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
                         *write++ = code != 0 ? (char) code : ' ';
                     }
                     else
                     {
                         var code =
                             (uint)
                                 (*start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
                         code <<= 4;
                         code +=
                             (uint)
                                 (*++start - '0' < 10 ? *start - '0' : ((*start & 0xdf) - ('0' + 'A' - '9' - 1)));
                         *write++ = code != 0 ? (char) code : ' ';
                     }
                     while (++start < end && *start != '%') *write++ = *start != 0 ? *start : ' ';
                 } while (start < end);
                 return SubStringStruct.Unsafe(value.Value, value.StartIndex,
                     (int) (write - valueFixed) - value.StartIndex);
             }
         }
     }
     return value;
 }
 public static void ToString(SubStringStruct value, CharStreamPlus jsonStream)
 {
     if (value.Value == null) WriteNull(jsonStream);
     else
     {
         jsonStream.PrepLength(value.Length + 2);
         jsonStream.Unsafer.Write(Quote);
         jsonStream.WriteBase(value);
         jsonStream.Unsafer.Write(Quote);
     }
 }