BlockCopy metodu
memcpy gibi çalışır. Array.Copy() ile benzerdir. Bu metodu yerine Marshal.Copy() de kullanılabilir.
Örnek
Şöyle yaparız.
Şöyle yaparız.
İki boyutlu diziyi tek boyutlu diziye kopyalamak için şöyle yaparız.
Şöyle yaparız.
Eğer bir string'in içindeki byte'ları hiçbir encoding'e tabi tutmadan başka bir yere kopyalamak istersek şöyle yaparız.
memcpy gibi çalışır. Array.Copy() ile benzerdir. Bu metodu yerine Marshal.Copy() de kullanılabilir.
Örnek
Şöyle yaparız.
Buffer.BlockCopy(src, 0, dst, 0, dst.Length);
ÖrnekŞöyle yaparız.
var floatArray1 = new float[] { 123.45f, 123f, 45f, 1.2f, 34.5f };
// create a byte array and copy the floats into it...
var byteArray = new byte[floatArray1.Length * 4];
Buffer.BlockCopy(floatArray1, 0, byteArray, 0, byteArray.Length);
Örnekİki boyutlu diziyi tek boyutlu diziye kopyalamak için şöyle yaparız.
var ary1 = new int[3,3];
ary1[0, 0] = 0;
ary1[0, 1] = 1;
ary1[0, 2] = 2;
ary1[1, 0] = 3;
ary1[1, 1] = 4;
ary1[1, 2] = 5;
ary1[2, 0] = 6;
ary1[2, 1] = 7;
ary1[2, 2] = 8;
var ary2 = new int[9];
Buffer.BlockCopy(ary1, 0, ary2, 0, 9 * sizeof(int));
Console.WriteLine(string.Join(",", ary2));
Çıktı olarak şunu alırız.0,1,2,3,4,5,6,7,8
ÖrnekŞöyle yaparız.
int[,] original = new int[3, 3]
{
{ 33, 300, 500 },
{ 56, 354, 516 },
{ 65, 654, 489 }
};
int[] target = new int[3];
int rowIndex = 1;
int columnNo = original.GetLength(1);
Buffer.BlockCopy(original,
rowIndex * columnNo * sizeof(int),
target,
0,
columnNo * sizeof(int));
target dizisine şunlar kopyalanır.56, 354, 516
ÖrnekEğer bir string'in içindeki byte'ları hiçbir encoding'e tabi tutmadan başka bir yere kopyalamak istersek şöyle yaparız.
static byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
static string GetString(byte[] bytes)
{
char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
Hiç yorum yok:
Yorum Gönder