Dobbiamo preoccuparci degli ordini di byte nel processo di programmazione di un gioco? Le console di gioco utilizzano ordini di byte diversi?
Dobbiamo preoccuparci degli ordini di byte nel processo di programmazione di un gioco? Le console di gioco utilizzano ordini di byte diversi?
Risposte:
Devi preoccupartene? Probabilmente no. La stragrande maggioranza della programmazione di gioco sarà a un livello tale che l'endianità viene sottratta. Anche nella rete, quasi sicuramente utilizzerai una libreria per i protocolli di rete. È un bene che tu ne sia consapevole, ma dubito che potresti incorrere in un problema.
Il più delle volte no.
L'endianess viene solitamente sottratta ai moduli di alto livello di un motore di gioco e non devi preoccuparti di questo ogni giorno. Se non è astratto, il motore ha un problema serio e dovrebbe essere risolto, perché questo non è il tipo di dettagli di cui dovresti preoccuparti quando crei un gioco.
Tuttavia, se stai lavorando su alcune parti di basso livello di un motore multipiattaforma C / C ++, potresti doverlo gestire. Tutte e tre le console della generazione attuale usano un'architettura PowerPC, che è big-endian, mentre l'architettura x86 utilizzata su PC è little-endian. Quindi, se stai lavorando su un codice che legge byte grezzi da qualche parte per inserirli in strutture di dati (serializzazione binaria, rete ...), sì, dovrai occupartene.
Ad esempio, in C / C ++, è comune vedere questo tipo di scambio di byte in azione (non testato, correzioni di benvenuto):
// 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
}
Ancora una volta, questo è OK nel codice di basso livello, ma non dovrebbe essere usato ovunque.
Dipende dalle piattaforme a cui ti rivolgi. Ad esempio, credo che la PS3 sia un grande end-end, quindi se questo è uno dei tuoi obiettivi allora è qualcosa di cui devi essere consapevole, sì.
Nello spazio dei computer di casa i "Big 3" (Windows, Linux, Mac) sono tutti esclusivamente, o quasi, eccellentemente, su architetture Intel x86 / x64 al giorno d'oggi, quindi i problemi di endienness non sono più rilevanti.