반응형
✔ C# 배열 복사
Buffer.BlockCopy 사용법
Array.Copy 사용법
Converting a string array to byte array
안녕하세요.
C#에서 배열 복사 방법은 다양합니다.
그중에서 대표적인게 Buffer.BlockCopy 와 Array.Copy가 있다.
파라미터 정보는 아래와 같다.
- Buffer.BlockCopy(원본배열, 원본배열의 복사 시작위치, 복사될배열, 복사될배열의 시작위치, 복사개수) - Array.Copy(원본배열, 원본배열의 복사 시작위치, 복사될배열, 복사될배열의 시작위치, 복사개수) - Array.Copy(원본배열, 복사될배열, 복사개수) - 인덱스 0부터 복사개수만큼 복사함 |
둘중에서 처리속도는 배열의 크기, 카피범위 size 계산 등에 따라 속도가 그때그때 다르다 -_-;;
Buffer.BlockCopy는 byte 형식의 배열에서만 동작한다.
● Buffer.BlockCopy
1. 사용방법
byte[] a = {1,2};
byte[] b = new string[a.Length];
Buffer.BlockCopy(a, 0, b, 0, a.Length);
foreach(var item in b)
{
Console.WriteLine(item);
}
2. 잘못된 예
▶ 위에서 언급했듯이 byte배열이 아닌 다른형식을 사용하면 에러가 나타난다.
string[] a = {"1","2" };
string[] b = new string[a.Length];
//에러 발생!!!!
Buffer.BlockCopy(a, 0, b, 0, a.Length);
foreach(var item in b)
{
Console.WriteLine(item);
}
"처리되지 않은 예외: System.ArgumentException: 개체가 기본 형식의 배열이어야 합니다."와 같은 에러가 발생된다.
string 배열을 byte의 배열로 변환하고 복사해야한다.
▶ string 배열을 byte의 배열로 변환
string[] a = {"1","2" };
byte[] b = new byte[a.Length];
//Converting string array to byte array
byte[] convert = a.Select(byte.Parse).ToArray();
Buffer.BlockCopy(convert, 0, b, 0, convert.Length);
foreach (var item in b)
{
Console.WriteLine(item);
}
● Array.Copy 사용법
string[] a = {"1","2" };
string[] b = new string[a.Length];
//에러 발생!!!!
//Buffer.BlockCopy(a, 0, b, 0, a.Length);
//오류 안남!!!!
Array.Copy(a, b, a.Length);
foreach (var item in b)
{
Console.WriteLine(item);
}
BlockCopy에서는 에러가 났던 내용인데 Array.Copy에서는 잘 동작한다.
● 결론
간단하게 생각하면 된다.
BlockCopy나 ArrayCopy나 속도면에서 크게 차이가 나지 않는다.
어떤 부분은 BlockCopy가 빠르고 어떤부분은 ArrayCopy가 빠를때가 있다.
코드 가독성을 고려한다면 이것저것 따지지 않고 ArrayCopy를 쓰는것이 답이다.
개인적인 의견입니다. ㅎㅎ
감사합니다.
반응형
'Programming > C#' 카테고리의 다른 글
[C#] 문자열(string, char [])을 byte[] 바이트 배열로 변환, byte[] 바이트 배열을 string 문자열로 변환 (592) | 2022.04.19 |
---|---|
[C#] Byte를 Bit 배열로 변환 - Bit를 Byte로 변환 (924) | 2022.04.01 |
[C#] 폴더안에 있는 파일들 찾아서 읽기 - DirectoryInfo (4) | 2022.03.14 |
[C#] String 데이터를 특정 문자, 문자열로 나누기 (String Split) (2) | 2022.01.06 |
[Unity3D, C#] 프로그램 윈도우 창 최소화, 최대화, 맨앞으로 활성화 (4) | 2021.11.10 |
댓글