Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 빅엔디안과 리틀엔디안 값을 어떻게 변환합니까?

<시간/>

C++에서 리틀 엔디안 값을 빅 엔디안으로 또는 빅 엔디안 값을 리틀 엔디안으로 변환하는 방법을 살펴보겠습니다. 본격적인 논의에 앞서 빅 엔디안과 리틀 엔디안이 무엇인지 알아볼까요?

다른 아키텍처에서 멀티바이트 데이터는 두 가지 다른 방식으로 저장할 수 있습니다. 때로는 상위 바이트가 먼저 저장되는 경우가 있는데, 이 경우 빅 엔디안이라고 하고 하위 바이트를 먼저 저장한 다음 리틀 엔디안이라고 합니다.

예를 들어 숫자가 0x9876543210이면 빅 엔디안은 -

가 됩니다.

C++에서 빅엔디안과 리틀엔디안 값을 어떻게 변환합니까?

리틀 엔디안은 다음과 같습니다 -

C++에서 빅엔디안과 리틀엔디안 값을 어떻게 변환합니까?

이 섹션에서는 리틀 엔디안을 빅 엔디안으로 또는 그 반대로 변환하는 방법을 살펴보겠습니다. 이렇게 하려면 첫 번째와 네 번째 바이트, 두 번째와 세 번째 바이트를 교환해야 합니다. 우리는 논리적 표현을 사용하여 그것들을 교환할 수 있습니다. 숫자를 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