/// <summary>
 ///     写数据
 /// </summary>
 /// <param name="data">数据</param>
 /// <param name="index">起始位置</param>
 /// <param name="count">写入字节数</param>
 public void Write(byte[] data, int index, int count)
 {
     var range = new ArrayPlus.RangeStruct(data.Length, index, count);
     if (range.GetCount == count)
     {
         PrepLength(count);
         fixed (byte* dataFixed = data)
         {
             MemoryUnsafe.Copy(dataFixed + range.SkipCount, Data + Length, count);
         }
         LengthBase += count;
     }
     else if (count != 0) LogPlus.Error.Throw(LogPlus.ExceptionTypeEnum.IndexOutOfRange);
 }
 /// <summary>
 ///     写字符串
 /// </summary>
 /// <param name="value">字符串</param>
 /// <param name="index">起始位置</param>
 /// <param name="count">写入字符数</param>
 public void WriteBase(string value, int index, int count)
 {
     var range = new ArrayPlus.RangeStruct(value.Length, index, count);
     if (range.GetCount == count)
     {
         PrepLengthBase(count <<= 1);
         fixed (char* valueFixed = value)
         {
             MemoryUnsafe.Copy(valueFixed + index, Data + LengthBase, count);
         }
         LengthBase += count;
     }
     else if (count != 0) LogPlus.Error.Throw(LogPlus.ExceptionTypeEnum.IndexOutOfRange);
 }
 /// <summary>
 ///     转换成字节数组
 /// </summary>
 /// <param name="index">起始位置</param>
 /// <param name="count">字节数</param>
 /// <returns>字节数组</returns>
 public byte[] GetArray(int index, int count)
 {
     var range = new ArrayPlus.RangeStruct(Length, index, count);
     if (count == range.GetCount)
     {
         var data = new byte[count];
         MemoryUnsafe.Copy(Data + index, data, count);
         return data;
     }
     if (count == 0) return null;
     LogPlus.Default.Throw(LogPlus.ExceptionTypeEnum.IndexOutOfRange);
     return null;
 }
Esempio n. 4
0
 /// <summary>
 ///     分割字符串
 /// </summary>
 /// <param name="value">原字符串</param>
 /// <param name="startIndex">起始位置</param>
 /// <param name="length">分割字符串长度</param>
 /// <param name="split">分割符</param>
 /// <returns>字符子串集合</returns>
 public static SubArrayStruct<SubStringStruct> Split(this string value, int startIndex, int length, char split)
 {
     var range = new ArrayPlus.RangeStruct(value.Length(), startIndex, length);
     if (range.GetCount != length) LogPlus.Error.Throw(LogPlus.ExceptionTypeEnum.IndexOutOfRange);
     var values = default(SubArrayStruct<SubStringStruct>);
     if (value != null)
     {
         fixed (char* valueFixed = value)
         {
             char* last = valueFixed + range.SkipCount, end = last + range.GetCount;
             for (var start = last; start != end;)
             {
                 if (*start == split)
                 {
                     values.Add(SubStringStruct.Unsafe(value, (int) (last - valueFixed), (int) (start - last)));
                     last = ++start;
                 }
                 else ++start;
             }
             values.Add(SubStringStruct.Unsafe(value, (int) (last - valueFixed), (int) (end - last)));
         }
     }
     return values;
 }