midas+son의 크리에이티브(creative) 이야기

우리들은 배열을 비우고자 한다.


byte[] recvData = new byte[10];


위와 같이 배열을 구성하고

뒤에 사이즈를 넣어주게 된다.

"이 배열은 이만큼만 쓸 것입니다"라는 의미이다.


거기에 0부터 9까지 byte를 넣었다고 생각해보자.

(int[]로 해도 됨)


그리고 01234 숫자를 없애고 싶다면 어떻게 할 것인가?


Array.Clear(recvData, 0, 5);    //(배열, 시작 인덱스, 시작 인덱스 부터 지울 길이)

위와 같은 C#의 Array 클래스에 있는 Clear 함수를 사용 할 수 있을 것이다.


하지만 recvData 를 내부를 보면

0000056789 의 byte 가 들어있다.


그게 아니라 앞에 지운것은 다 없애고

56789 만 남게 하고 싶다면 어떻게 해야 하겠는가?


Array.Clear(recvData, 0, 5);


int count = 0;

for (int i = 0; i < recvData.Length; ++i)

{

    if (recvData[i] == '\0')

    {

        ++count;

    }

    else break;

}

byte[] recvData2 = new byte[recvData.Length - count];

Array.Copy(recvData, count, recvData2, 0, recvData2.Length);    // (원본배열, 옮길 인덱스 시작 위치, 복사본 배열, 복사될 시작위치, 복사될 길이)


편리한 함수가 따로 있지 않은 것 같다.

(내가 못찾은 것일 수도 있다.)


위와 같이 '\0'이 들어간 부분을 카운트 하여 앞에서부터 길이를 재고

Array.Copy 로 다른 배열로 옮기는 것이다.

그러면 뒤에서 부터 잘라 올 수 있다.


그럼 반대로 뒤에를 날리고 앞에꺼만 보존 하여

배열 사이즈를 맞춘다면 어떻게 할까?


Array.Resize(ref recvData, recvData.Length - eraseLength);    // (원본 배열 ref 꼭 붙여야 함(참조의 의미), 재조정할 사이즈)


위와 같은 Resize함수를 사용해주면 

사이즈를 재조정해주면서 

뒤를 없앨 수 있다.


위의 함수 들을 복합적으로 사용하면

중간 중간에 비어있는 값들도 뺄 수 있게 되니

잘 처리해보도록 하자

'공부 > C#' 카테고리의 다른 글

연산자 오버로딩(==, !=)  (0) 2017.05.12
C#에서의 상수 사용 - c++의 #define 같은 활용 방안  (0) 2016.06.16
C# 람다 식  (0) 2016.06.08
C# Windows Forms - 오목  (0) 2016.05.31
소켓 통신, 웹 통신(간략 설명, 메모)  (0) 2016.05.28