Exemple #1
0
 /// <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);
         }
     }
 }
Exemple #2
0
        /// <summary>
        ///     写入一个指定类型的值
        /// </summary>
        /// <param name="value">指定类型的值</param>
        public void WriteInt32(int value)
        {
            int *          pValue  = &value;
            IMemorySegment segment = GetSegment(_currentIndex);
            uint           remainingSize;

            if (segment.EnsureSize(Size.Int32, out remainingSize))
            {
                segment.WriteInt32(pValue);
            }
            else
            {
                uint trueRemainingSize = Size.Int32;
                if (remainingSize > 0U)
                {
                    segment.WriteMemory((IntPtr)pValue, remainingSize);
                    trueRemainingSize -= remainingSize;
                }
                segment = GetSegment(++_currentIndex);
                segment.WriteMemory((IntPtr)((byte *)pValue + remainingSize), trueRemainingSize);
            }
        }