아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
진실한수달129
진실한수달12924.02.01

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바이트 값으로 변환합니다.

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