C# 개발 시, 특히 네트워크 통신이나 파일 처리와 같은
작업에서 데이터를 반드시 다뤄야 합니다.
이때, Array 클래스는 데이터 컬렉션을 효율적으로
관리할 수 있는 다양한 메서드를 제공합니다.
이번 포스팅은 그중에서도 Reserve, Copy, ConvertAll 메서드를 통해
byte 배열을 어떻게 다룰 수 있는지 정리하였습니다.
| Reverse
데이터의 순서를 뒤집어야 할 때, Array.Reverse 메서드를 사용합니다.
Endian 변환 과정에서 필요한 작업을 손쉽게 처리할 수 있습니다
| Reverse 메서드 파라미터
public static void Reverse(Array array, int index, int length)
- array : 순서를 뒤집을 배열
- index : 뒤집기 시작할 위치의 인덱스
- length : 뒤집을 요소의 수
Reverse 메서드는 배열의 특정 부분을 뒤집을 수도 있지만
전체 배열을 뒤집고 싶다면 Array.Reverse(array) 형태로 사용할 수 있습니다.
코드 예시를 통해 알아보겠습니다.
예시)
byte[] data1 = { 1, 2, 3, 4, 5 };
Array.Reverse(data1, 2, 3);
foreach (byte b in data1)
{
Console.Write(b + " "); // 결과 : 1 2 5 4 3
}
byte[] data2 = { 1, 2, 3, 4, 5 };
Array.Reverse(data2);
foreach(byte b in data2)
{
Console.Write(b + " "); // 결과 : 5 4 3 2 1
}
| Copy
배열의 일부를 다른 배열로 복사해야 할 때, Array.Copy 메서드를 사용합니다.
필요한 데이터 부분만을 선택하여 복사하는 작업에 처리할 수 있습니다.
| Copy 메서드 파라미터
public static void Copy(Array srcArr, int srcIdx, Array destArr, int destIdx, int length)
- srcArr : 복사할 데이터가 있는 원본 배열
- srcIdx : 원본 배열에서 복사를 시작할 위치의 인덱스
- destArr : 복사된 데이터를 저장할 대상 배열
- destIdx : 대상 배열에서 복사된 데이터를 저장하기 시작할 위치의 인덱스
- length : 복사할 요소의 수
Copy 메서드는 원본 배열의 특정 부분을 대상 배열의 지정된 위치로 복사합니다.
예시)
byte[] sourceData = { 1, 2, 3, 4, 5 };
byte[] destinationData = new byte[3];
Array.Copy(sourceData, 1, destinationData, 0, 3);
Console.WriteLine("Copied data: ");
foreach(byte b in destinationData)
{
Console.Write(b + " "); // 결과 : 2, 3, 4
}
| ConvertAll
ConvertAll 메서드는 배열의 모든 요소를 지정된 형식으로 변환할 때 사용합니다.
이 메서드는 System.Array 클래스에 정의되어 있습니다.
| ConvertAll 메서드 파라미터
public static TOutput[] ConvertAll<TInput, TOutput>(TInput[] array, Converter<TInput, TOutput> converter)
- array : 변환된 요소가 들어있는 입력 배열
- converter : 각 요소를 반환하는 데 사용할 Converter<TInput, TOutput> 대리자
ConvertAll는 입력 배열의 모든 요소를 converter 함수를 통해 변환한 후,
그 결과를 새 배열로 반환하는 메서드입니다,
converter 파라미터는 변환 로직을 정의하는 데 사용합니다.
예시)
byte[] data = { 1, 2, 3, 4, 5 };
int[] convertedData = Array.ConvertAll(data, element => (int)element);
foreach (int i in convertedData)
{
Console.Write(i + " "); // 결과 : 1 2 3 4 5
}
Console.WriteLine();
Console.WriteLine(data.GetType().ToString()); // System.Byte[]
Console.WriteLine(convertedData.GetType().ToString()); // System.int[]
| 마무리
Array 클래스의 3가지의 메서드에 대해 정리하였습니다.
프로젝트를 진행하면서 모듈과 통신해야 하는 코드를 짜야했는데
몰라서 애먹었네요 ㅠ
틀린 점이나 질문이 있으시면 댓글로 남겨주세요!
감사합니다 :)
'C#' 카테고리의 다른 글
C# Modbus TCP 통신 뚫기 : NModbus 라이브러리 사용 (4) | 2024.10.03 |
---|---|
C# 네트워크 통신을 위한 BitConverter 클래스 이해 (0) | 2024.03.18 |
C# List의 마지막 요소에 접근하는 3가지 방법 (0) | 2024.02.20 |
C# 멀티스레드 동기화 : Monitor.Enter, Monitor.Exit (0) | 2024.02.19 |
C# "System.InvalidOperationException: collection was modified enumeration operation may not execute." 에러 처리 방법 (0) | 2024.01.23 |