พจนานุกรม

ลำดับไบต์หมายถึงอะไร?

ไบต์ออร์เดอร์เป็นหนึ่งในรายละเอียดที่ซ่อนอยู่ซึ่งคุณพบได้ในไฟล์เมื่อคุณตรวจสอบข้อมูลเมทาดาทาของไฟล์ มาดูกันว่ามันหมายถึงอะไรและบอกอะไรคุณเกี่ยวกับวิธีที่ไฟล์ของคุณถูกเขียนขึ้น

byte-order

ลำดับไบต์ (Byte Order) หรือที่เรียกว่า endianness คือการเรียงลำดับว่าบิต/ไบต์ของค่าที่มีหลายไบต์ถูกจัดเก็บอย่างไร คอมพิวเตอร์สามารถเขียนไบต์เหล่านั้นได้โดยเริ่มจากปลายด้านใดด้านหนึ่ง และไฟล์จะต้องระบุว่าใช้ปลายด้านไหน เพื่อให้โปรแกรมที่มาอ่านทีหลังสามารถได้ค่ากลับมาเหมือนเดิม

รูปแบบไบต์สองแบบ

ไบต์หนึ่งไบต์เมื่ออยู่เดี่ยว ๆ จะไม่กำกวม ตัวเลขที่ใหญ่เกินกว่าจะเก็บได้ในหนึ่งไบต์ต้องถูกแยกเป็นหลายไบต์ และตรงนี้เองที่ทำให้เกิดธรรมเนียมสองแบบที่ต่างกัน:

  • Big-endian: การจัดเก็บหรือส่งข้อมูลเริ่มจากไบต์ที่มีบิตสำคัญที่สุด โดยความสำคัญจะลดลงไปเรื่อย ๆ
  • Little-endian: การจัดเก็บหรือส่งข้อมูลเริ่มจากไบต์ที่มีบิตสำคัญน้อยที่สุด โดยความสำคัญจะเพิ่มขึ้นไปเรื่อย ๆ

ลองดูตัวเลข 4660 ซึ่งต้องใช้สองไบต์ ไฟล์แบบ big-endian จะเขียนเป็น 12 34 ส่วนไฟล์แบบ little-endian จะเขียนเป็น 34 12 ตัวเลขเดียวกันแต่ลำดับกลับกัน ยังมีรูปแบบผสมที่เรียกว่า mixed-endian หรือ middle-endian แต่พบไม่บ่อย ลำดับหลักทั้งสองแบบถูกใช้งานอยู่ในชีวิตประจำวัน และแบบที่คุณพบจะขึ้นอยู่กับอุปกรณ์หรือโปรแกรมที่สร้างไฟล์นั้น

ไฟล์ใดที่มีรายการนี้อยู่

ฟิลด์นี้เป็นที่รู้จักกันมากที่สุดจาก TIFF และทุกอย่างที่สร้างบนโครงสร้าง TIFF ซึ่งรวมถึงบล็อกเมทาดาต้า Exif ในภาพ JPEG และไฟล์กล้อง RAW เช่น NEF, CR2, ARW และ DNG ไฟล์เหล่านี้เริ่มต้นด้วยตัวระบุสองตัวอักษร II สำหรับ Intel หรือ MM สำหรับ Motorola ซึ่งเป็นบริษัทที่โปรเซสเซอร์ของพวกเขาทำให้ลำดับแต่ละแบบแพร่หลาย รายงานมักจะเขียนเต็มว่า Little-endian (Intel, II) หรือ Big-endian (Motorola, MM) กล้อง สแกนเนอร์ หรือโปรแกรมที่เขียนเมทาดาต้าเป็นผู้เลือกลำดับนี้

คอนเทนเนอร์เสียงก็ตัดสินใจในระดับทั้งฟอร์แมตเช่นกัน: WAV จัดเก็บค่าในแบบ little-endian และ AIFF จัดเก็บแบบ big-endian ซึ่งเป็นหนึ่งในเหตุผลที่ทำให้สองฟอร์แมตที่เก็บตัวอย่างเสียงเหมือนกันทุกประการไม่สามารถใช้แทนกันได้แบบไบต์ต่อไบต์

เหตุใดจึงสำคัญต่อไฟล์ของคุณ

ลำดับไบต์คือเหตุผลที่เมทาดาต้าที่เขียนจากเครื่องหนึ่งอาจกลายเป็นข้อมูลไร้ความหมายบนอีกเครื่องหนึ่ง ตัวอ่านที่ไม่สนใจตัวระบุ หรือเดาลำดับผิด จะไม่ได้แค่ล้มเหลวอย่างสุภาพ: แต่มันจะสร้างวันที่ที่เป็นไปไม่ได้ ค่าการรับแสงที่ผิดปกติ และความยาวที่ชี้เลยท้ายไฟล์ หรือไม่ก็ระบุไปเลยว่าเมทาดาต้าอ่านไม่ได้ การรู้ลำดับไบต์จะบอกได้ว่าจะเปิดและประมวลผลไฟล์ได้อย่างถูกต้องอย่างไร

เรื่องนี้ยิ่งสำคัญเป็นสองเท่าหากคุณแก้ไขเมทาดาต้า เพราะค่าที่เขียนใหม่ต้องถูกบันทึกกลับไปตามลำดับที่ไฟล์ระบุไว้ และหากตัวระบุลำดับนั้นเสียหาย บล็อกเมทาดาต้าทั้งหมดมักจะอ่านไม่ได้ แม้ว่าภาพหรือเสียงภายในไฟล์จะยังสมบูรณ์ดี ฟิลด์นี้อธิบายแค่ว่าไฟล์ถูกจัดวางอย่างไร จึงไม่มีข้อมูลส่วนตัวเกี่ยวกับคุณหรืออุปกรณ์ของคุณอยู่เลย

คีย์เมตา