Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

โปรแกรม C# คัดลอกช่วงไบต์จากอาร์เรย์หนึ่งไปอีกอาร์เรย์


ภาพรวม

เมธอด Buffer.BlockCopy() ใช้คัดลอก ช่วงไบต์ (byte range) จากอาร์เรย์ต้นทางไปยังอาร์เรย์ปลายทาง ทำงานระดับไบต์ (byte-level) ไม่ใช่ระดับองค์ประกอบ

รูปแบบการใช้งาน

byte[] src = { 22, 49 };
byte[] dst = new byte[5];
Buffer.BlockCopy(src, 0, dst, 0, 2); // คัดลอก 2 ไบต์จาก src[0] ไป dst[0]

ตัวอย่างโค้ดเต็ม

using System;

class Demo
{
    static void Main()
    {
        byte[] b1 = new byte[] { 22, 49 };
        byte[] b2 = new byte[5];
        Buffer.BlockCopy(b1, 0, b2, 0, 2);
        BufferFunc(b2);
    }
    static void BufferFunc(byte[] a)
    {
        for (int j = 0; j < a.Length; j++) Console.Write(a[j]);
        Console.WriteLine();
    }
}

ผลลัพธ์

2249000

ข้อสังเกตสำคัญ

  • พารามิเตอร์ offset และ count เป็น จำนวนไบต์ ไม่ใช่จำนวนองค์ประกอบ
  • สำหรับ byte[] 1 องค์ประกอบ = 1 ไบต์ จึงตรงกัน
  • สำหรับ int[] 1 องค์ประกอบ = 4 ไบต์ ต้องคูณ offset/count ด้วย 4
  • เร็วกว่าการวนลูปคัดลอกทีละตัว
  • ทำงานกับ primitive types ที่เก็บติดกันในหน่วยความจำ (arrays of value types)