程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#經由過程指針完成疾速拷貝的辦法

C#經由過程指針完成疾速拷貝的辦法

編輯:C#入門知識

C#經由過程指針完成疾速拷貝的辦法。本站提示廣大學習愛好者:(C#經由過程指針完成疾速拷貝的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#經由過程指針完成疾速拷貝的辦法正文


本文實例講述了C#經由過程指針完成疾速拷貝的辦法。分享給年夜家供年夜家參考。詳細完成辦法以下:

// fastcopy.cs
// 編譯時應用:/unsafe
using System;
class Test
{
  // unsafe 症結字許可鄙人列
  // 辦法中應用指針:
  static unsafe void Copy(byte[] src, int srcIndex, byte[] dst, int dstIndex, int count)
  {
    if (src == null || srcIndex < 0 ||
      dst == null || dstIndex < 0 || count < 0)
    {
      throw new ArgumentException();
    }
    int srcLen = src.Length;
    int dstLen = dst.Length;
    if (srcLen - srcIndex < count || dstLen - dstIndex < count)
    {
      throw new ArgumentException();
    }
    // 以下固定語句固定
    // src 對象和 dst 對象在內存中的地位,以使這兩個對象
    // 不會被渣滓收受接管挪動。
    fixed (byte* pSrc = src, pDst = dst)
    {
      byte* ps = pSrc;
      byte* pd = pDst;
      // 以 4 個字節的塊為單元輪回計數,一次復制
      // 一個整數(4 個字節):
      for (int n = 0; n < count / 4; n++)
      {
        *((int*)pd) = *((int*)ps);
        pd += 4;
        ps += 4;
      }
      // 挪動未以 4 個字節的塊挪動的一切字節,
      // 從而完成復制:
      for (int n = 0; n < count % 4; n++)
      {
        *pd = *ps;
        pd++;
        ps++;
      }
    }
  }
  static void Main(string[] args)
  {
    byte[] a = new byte[100];
    byte[] b = new byte[100];
    for (int i = 0; i < 100; ++i)
      a[i] = (byte)i;
    Copy(a, 0, b, 0, 100);
    Console.WriteLine("The first 10 elements are:");
    for (int i = 0; i < 10; ++i)
      Console.Write(b[i] + " ");
    Console.WriteLine("\n");
  }
}

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved