/// <summary> /// 写入一个指定类型的值 /// </summary> /// <param name="value">指定类型的值</param> public void WriteIntPtr(IntPtr value) { //x86 if (Size.IntPtr == 4) { int temp = value.ToInt32(); int * tempValue = &temp; IMemorySegment segment = GetSegment(_currentIndex); uint remainingSize; if (segment.EnsureSize(Size.IntPtr, out remainingSize)) { segment.WriteInt32(tempValue); } else { uint trueRemainingSize = Size.IntPtr; if (remainingSize > 0U) { segment.WriteMemory((IntPtr)tempValue, remainingSize); trueRemainingSize -= remainingSize; } segment = GetSegment(++_currentIndex); segment.WriteMemory((IntPtr)((byte *)tempValue + remainingSize), trueRemainingSize); } } //x64 else { long temp = value.ToInt64(); long * tempValue = &temp; IMemorySegment segment = GetSegment(_currentIndex); uint remainingSize; if (segment.EnsureSize(Size.IntPtr, out remainingSize)) { segment.WriteInt64(tempValue); } else { uint trueRemainingSize = Size.IntPtr; if (remainingSize > 0U) { segment.WriteMemory((IntPtr)tempValue, remainingSize); trueRemainingSize -= remainingSize; } segment = GetSegment(++_currentIndex); segment.WriteMemory((IntPtr)((byte *)tempValue + remainingSize), trueRemainingSize); } } }
/// <summary> /// 写入一个指定类型的值 /// </summary> /// <param name="value">指定类型的值</param> public void WriteInt64(long *value) { long * pValue = value; IMemorySegment segment = GetSegment(_currentIndex); uint remainingSize; if (segment.EnsureSize(Size.Int64, out remainingSize)) { segment.WriteInt64(pValue); } else { uint trueRemainingSize = Size.Int64; if (remainingSize > 0U) { segment.WriteMemory((IntPtr)pValue, remainingSize); trueRemainingSize -= remainingSize; } segment = GetSegment(++_currentIndex); segment.WriteMemory((IntPtr)((byte *)pValue + remainingSize), trueRemainingSize); } }
/// <summary> /// 写入一个指定类型的值 /// </summary> /// <param name="value">指定类型的值</param> public void WriteTimeSpan(TimeSpan value) { long temp = value.Ticks; long * tempValue = &temp; IMemorySegment segment = GetSegment(_currentIndex); uint remainingSize; if (segment.EnsureSize(Size.TimeSpan, out remainingSize)) { segment.WriteInt64(tempValue); } else { uint trueRemainingSize = Size.TimeSpan; if (remainingSize > 0U) { segment.WriteMemory((IntPtr)tempValue, remainingSize); trueRemainingSize -= remainingSize; } segment = GetSegment(++_currentIndex); segment.WriteMemory((IntPtr)((byte *)tempValue + remainingSize), trueRemainingSize); } }