게임 프로그래밍 과정에서 바이트 순서에 대해 걱정해야합니까? 게임 콘솔은 다른 바이트 순서를 사용합니까?
게임 프로그래밍 과정에서 바이트 순서에 대해 걱정해야합니까? 게임 콘솔은 다른 바이트 순서를 사용합니까?
답변:
대부분의 경우 아닙니다.
Endianess는 일반적으로 게임 엔진의 고급 모듈에서 추상화되며 매일 걱정하지 않아도됩니다. 추상화되지 않은 경우 엔진에 심각한 문제가 있으며 수정해야합니다. 게임을 만들 때 걱정해야 할 세부 정보가 아니기 때문입니다.
그러나 C / C ++ 다중 플랫폼 엔진의 일부 저수준 부분에서 작업하는 경우 처리해야 할 수도 있습니다. 3 개의 현재 세대 콘솔은 모두 빅 엔디안 인 PowerPC 아키텍처를 사용하는 반면 PC에서 사용되는 x86 아키텍처는 리틀 엔디안입니다. 따라서 원시 바이트를 어디서나 읽어 데이터 구조 (이진 직렬화, 네트워킹 ...)에 넣는 코드를 작성하는 경우 처리해야합니다.
예를 들어, C / C ++에서는 이런 종류의 바이트 스와핑이 작동하는 것을 보는 것이 일반적입니다 (테스트되지 않은 환영 수정).
// Assume bytes comes ordered as big-endian
u16 u16FromBytes(void* data)
{
#if BIG_ENDIAN
return (u16(data[0]) << 8) + u16(data[1]);
#else // LITTLE_ENDIAN
return (u16(data[1]) << 8) + u16(data[0]);
#endif
}
다시 한 번, 이것은 저수준 코드에서 괜찮지 만 모든 곳에서 사용되는 것은 아닙니다.
타겟팅하는 플랫폼에 따라 다릅니다. 예를 들어, PS3는 빅 엔디안이라고 생각합니다. 만약 그것이 당신의 목표 중 하나라면, 당신이 알아야 할 것이 있습니다.
가정용 컴퓨터 공간에서 "Big 3"(Windows, Linux, Mac)은 요즘 인텔 x86 / x64 아키텍처에서 독점적으로 또는 전부 나 우수하지만, 엔디 엔 니스 문제는 더 이상 관련이 없습니다.