Czy musimy martwić się kolejnością bajtów podczas programowania gry? Czy konsole do gier używają różnych kolejności bajtów?
Czy musimy martwić się kolejnością bajtów podczas programowania gry? Czy konsole do gier używają różnych kolejności bajtów?
Odpowiedzi:
Czy musisz się tym martwić? Prawdopodobnie nie. Zdecydowana większość programów gier będzie na takim poziomie, że endianizm zostanie oderwany. Nawet w sieci prawie na pewno będziesz używać biblioteki do protokołów sieciowych. Dobrze, że zdajesz sobie z tego sprawę, ale wątpię, byś miał z tym problem.
Przez większość czasu nie.
Endianess jest zwykle wyabstrahowany w modułach wysokiego poziomu silnika gry i nie musisz się o to martwić codziennie. Jeśli nie jest abstrakcyjny, silnik ma poważny problem i powinien zostać naprawiony, ponieważ nie są to takie szczegóły, o które powinieneś się martwić podczas tworzenia gry.
Jeśli jednak pracujesz nad niskopoziomowymi częściami silnika wieloplatformowego C / C ++, być może będziesz musiał sobie z tym poradzić. Wszystkie trzy konsole obecnej generacji wykorzystują architekturę PowerPC, która jest big-endianem, podczas gdy architektura x86 używana na PC jest little-endianem. Więc jeśli pracujesz nad kodem, który odczytuje gdzieś surowe bajty, aby umieścić je w strukturach danych (serializacja binarna, sieci ...), tak, będziesz musiał sobie z tym poradzić.
Na przykład w C / C ++ często zdarza się, że tego rodzaju zamiana bajtów w akcji (nie testowana, mile widziane poprawki):
// 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
}
Po raz kolejny jest to OK w kodzie niskiego poziomu, ale nie powinno to być wszędzie używane.
To zależy od platform, na które celujesz. Na przykład uważam, że PS3 to wielki endien, więc jeśli jest to jeden z twoich celów, musisz o tym wiedzieć, tak.
W domowej przestrzeni komputerowej „Big 3” (Windows, Linux, Mac) są obecnie wyłącznie, lub wszystkie, ale znakomicie, na architekturze Intel x86 / x64, więc obawy dotyczące endienity nie są już istotne.