안녕하세요. 힘진최입니다.
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); }
참고:
도움이 되었기를 바랍니다!