아하
생활

생활꿀팁

진실한수달129
진실한수달129

c언어 바이트 배열값을 리틀엔디안 4바이트값으로 변환할려면 어떻게 해야되나요?

예를들면

BYTE* arr = new BYTE[250];

동적 배열을 생성해서 arr[0] = 23, arr[1] = 44, arr[2] = , 32 arr[3] = 80... 이런식으로 바이트 값이 들어있고

4바이트씩 값을 보고싶을땐 어떻게 해야되나요?(리틀엔디안으로)

가령 arr[0~4] 4바이트씩 읽을라면 {0x17, 0x2C, 0x20, 0x50} 이니까 DWORD 값(0x172C2050)은 1344285719

또 arr[1~5] 이런식으로 쭉 읽고싶은데 어떻게 해야되나요?

    55글자 더 채워주세요.
    1개의 답변이 있어요!
    • 힘진최
      힘진최

      안녕하세요. 힘진최입니다.

      C 언어에서 바이트 배열을 리틀 엔디안 4바이트 값으로 변환하는 방법

      C 언어에서 바이트 배열을 리틀 엔디안 4바이트 값으로 변환하는 방법은 여러 가지가 있습니다.

      1. 직접 변환하기

      C

      uint32_t to_little_endian(const BYTE* bytes) { uint32_t value = 0; for (int i = 0; i < 4; i++) { value |= bytes[i] << (i * 8); } return value; } // 예시 BYTE arr[] = { 23, 44, 32, 80, ... }; uint32_t value = to_little_endian(arr);

      2. union 사용하기

      C

      union { uint32_t value; BYTE bytes[4]; } data; // 예시 BYTE arr[] = { 23, 44, 32, 80, ... }; data.bytes[0] = arr[0]; data.bytes[1] = arr[1]; data.bytes[2] = arr[2]; data.bytes[3] = arr[3]; uint32_t value = data.value;

      3. memcpy 사용하기

      C

      uint32_t value; memcpy(&value, arr, sizeof(uint32_t)); // 예시 BYTE arr[] = { 23, 44, 32, 80, ... }; uint32_t value; memcpy(&value, arr, sizeof(uint32_t));

      4. 템플릿 함수 사용하기

      C

      template <typename T> T to_little_endian(const BYTE* bytes) { T value; memcpy(&value, bytes, sizeof(T)); return value; } // 예시 BYTE arr[] = { 23, 44, 32, 80, ... }; uint32_t value = to_little_endian<uint32_t>(arr);

      5. 라이브러리 사용하기

      ntohl 같은 라이브러리 함수를 사용하여 네트워크 바이트 순서를 호스트 바이트 순서로 변환할 수 있습니다.

      예시:

      C

      uint32_t value = ntohl(*(uint32_t*)arr); // 예시 BYTE arr[] = { 23, 44, 32, 80, ... }; uint32_t value = ntohl(*(uint32_t*)arr);

      참고:

      • 리틀 엔디안은 낮은 주소에 낮은 바이트 값을 저장하는 방식입니다.

      • 위 코드는 예시이며, 실제 코드는 상황에 맞게 수정해야 합니다.

      4바이트씩 값을 읽는 방법

      4바이트씩 값을 읽으려면 다음과 같이 반복문을 사용합니다.

      C

      for (int i = 0; i < n; i += 4) { uint32_t value = to_little_endian(&arr[i]); // ... } // 예시 BYTE arr[] = { 23, 44, 32, 80, ... }; for (int i = 0; i < n; i += 4) { uint32_t value = to_little_endian(&arr[i]); printf("%d\n", value); }

      참고:

      • n은 배열의 길이입니다.

      • to_little_endian 함수는 바이트 배열을 리틀 엔디안 4바이트 값으로 변환합니다.

      도움이 되었기를 바랍니다!