C++에서 리틀 엔디안 값을 빅 엔디안으로 또는 빅 엔디안 값을 리틀 엔디안으로 변환하는 방법을 살펴보겠습니다. 본격적인 논의에 앞서 빅 엔디안과 리틀 엔디안이 무엇인지 알아볼까요?
다른 아키텍처에서 멀티바이트 데이터는 두 가지 다른 방식으로 저장할 수 있습니다. 때로는 상위 바이트가 먼저 저장되는 경우가 있는데, 이 경우 빅 엔디안이라고 하고 하위 바이트를 먼저 저장한 다음 리틀 엔디안이라고 합니다.
예를 들어 숫자가 0x9876543210이면 빅 엔디안은 -
가 됩니다.
리틀 엔디안은 다음과 같습니다 -
이 섹션에서는 리틀 엔디안을 빅 엔디안으로 또는 그 반대로 변환하는 방법을 살펴보겠습니다. 이렇게 하려면 첫 번째와 네 번째 바이트, 두 번째와 세 번째 바이트를 교환해야 합니다. 우리는 논리적 표현을 사용하여 그것들을 교환할 수 있습니다. 숫자를 4번 복사한 다음 첫 번째 복사본의 경우 첫 번째 바이트를 오른쪽으로 24번 이동하고 두 번째 복사본의 경우 00FF0000으로 마스킹한 다음 8비트를 오른쪽으로 바꾸고 세 번째 복사본의 경우 0000FF00으로 마스킹합니다. , 왼쪽으로 8비트 시프트하고 마지막 복사본의 경우 요소를 왼쪽으로 24번 교체합니다. 그런 다음 이 4개의 복사본을 논리적으로 OR하여 반대 결과를 얻습니다.
예시
#include <iostream> #define SWAP_INT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24)) using namespace std; void memory_represent(char *value, int n) { int i; for (i = 0; i < n; i++) printf(" %.2x", value[i]); } int main() { unsigned int x = 0x9876543210; int y; cout << "The little endian value is: "; memory_represent((char*)&x, sizeof(x)); cout << endl; y = SWAP_INT32(x); cout << "The Big endian value after conversion is: "; memory_represent((char*)&y, sizeof(y)); cout << endl; }
출력
The little endian value is: 10 32 54 76 The Big endian value after conversion is: 76 54 32 10