본문 바로가기
C++/예제

[C][C++] 배열을 활용한 바이트 스왑 예제

by 부먹짱 2022. 4. 7.
반응형

바이트 배열 순서를 바꾸는 함수를 구현하게 되어 예제로 공유하게 되었다.

비트 연산을 활용한 바이트 스왑에 관한 글은 이미 많기 때문에 생략하고 배열을 활용할 것이다.

배열을 활용한 바이트 스왑의 장점은 데이터의 크기와 상관없이 하나의 함수로 스왑이 가능하다는 점인 거 같다.

 

ByteSwap.zip
2.83MB

 

Byte Swap 함수

단순하게 기존 배열에 들어있던 데이터를 tmpBuf에 역순으로 저장하고, tmpBuf를 다시 기존 배열에 복사한다.

 

void SwapByte(char* buf, int msgNum)
{
	char tmpBuf[100];
	int num = msgNum - 1;

	for (int i = num; i >= 0; i--) {
		tmpBuf[i] = buf[num - i];
	}

	memcpy(buf, tmpBuf, msgNum);
}

 

사용법 또한 단순하다.

아래와 같이 원하는 데이터를 char*에 캐스팅해주면 된다.

 

// char array
char msg[4] = { '1', '2', '3', '4' };
SwapByte((char*)&msg, 4);

// int
int msg2 = 4;
SwapByte((char*)&msg2, sizeof(msg2));

 

\결과 화면

 

반응형

 

Byte Swap by 2Byte 함수

추가로 2byte 단위로 바이트 순서를 바꾸는 함수 또한 구현해보았다. 사용법은 동일하다.

 

void SwapBy2Byte(char* buf, int msgNum)
{
	char tmpBuf[100];
	int num = msgNum - 1;

	for (int i = num; i >= 0; i -= 2) {
		tmpBuf[i - 1] = buf[num - i];
		tmpBuf[i] = buf[num - (i - 1)];
	}

	memcpy(buf, tmpBuf, msgNum);
}

 

결과 화면

 

 

이를 응용하면 다양한 단위로 바이트 순서를 바꾸는 함수를 구현할 수 있을 것이다.

하지만 단순하게 구현하여 더 좋은 방법이 있을수도 있다.

 

 

함께 보면 좋은 글 ▽

빅 엔디안 & 리틀 엔디안 (Big-Endian & Little-Endian)

 

 

반응형

댓글