เราต้องกังวลเกี่ยวกับคำสั่งไบต์ในการเขียนโปรแกรมเกมหรือไม่? คอนโซลเกมใช้คำสั่งไบต์ต่างกันหรือไม่?
เราต้องกังวลเกี่ยวกับคำสั่งไบต์ในการเขียนโปรแกรมเกมหรือไม่? คอนโซลเกมใช้คำสั่งไบต์ต่างกันหรือไม่?
คำตอบ:
หากคุณกำลังเขียนรหัสเครือข่ายสิ่งนี้มักจะเป็นสิ่งที่คุณต้องจัดการใช่
นอกจากนี้ยังเป็นไปได้ว่าการสั่งซื้อไบต์ในรูปแบบไฟล์ไม่ใช่สิ่งที่แพลตฟอร์มของคุณใช้ดังนั้นบางครั้งก็มีความสำคัญเช่นกัน
คุณต้องกังวลกับมันหรือไม่? ไม่น่าจะ การเขียนโปรแกรมเกมส่วนใหญ่จะอยู่ในระดับที่ endianness ถูกแยกออกไป แม้แต่ในระบบเครือข่ายคุณก็เกือบจะใช้ห้องสมุดสำหรับโปรโตคอลเครือข่าย เป็นเรื่องที่ดีที่คุณรู้ แต่ฉันสงสัยว่าคุณมีปัญหากับมัน
ส่วนใหญ่ไม่มี
Endianess มักจะถูกแยกออกไปในโมดูลระดับสูงของเอ็นจิ้นเกมและคุณไม่ต้องกังวลกับมันในชีวิตประจำวัน ถ้ามันไม่เป็นนามธรรมแล้วเอ็นจิ้นมีปัญหาร้ายแรงและควรได้รับการแก้ไขเพราะนี่ไม่ใช่รายละเอียดที่คุณควรกังวลเมื่อทำเกม
อย่างไรก็ตามหากคุณกำลังทำงานกับชิ้นส่วนระดับต่ำของเอนจิ้น C / C ++ หลายแพลตฟอร์มคุณอาจต้องจัดการกับมัน คอนโซลยุคปัจจุบันทั้งสามรุ่นใช้สถาปัตยกรรม PowerPC ซึ่งเป็นบิ๊ก - เอ็นด์ในขณะที่สถาปัตยกรรม 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
}
อีกครั้งนี่เป็น OK ในรหัสระดับต่ำ แต่สิ่งนี้ไม่ควรใช้ทุกที่
ขึ้นอยู่กับแพลตฟอร์มที่คุณกำหนดเป้าหมาย ตัวอย่างเช่นฉันเชื่อว่า PS3 นั้นเป็นเกมที่ยอดเยี่ยมดังนั้นถ้ามันเป็นหนึ่งในเป้าหมายของคุณมันเป็นสิ่งที่คุณต้องระวังใช่
ในพื้นที่คอมพิวเตอร์ในบ้านนั้น "บิ๊ก 3" (Windows, Linux, Mac) ล้วน แต่เป็นเอกสิทธิ์หรือทั้งหมดยกเว้น แต่ในสถาปัตยกรรมของ Intel x86 / x64 ปัจจุบันความกังวลเรื่องความไม่ได้เกี่ยวข้องกันอีกต่อไป