Zig Academy · บทเรียน

packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ

จัดวางบิตโดยไม่มีช่องว่างเติม

บทเรียน 1 จาก 413 ขั้นตอน

packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

เลย์เอาต์มีความสำคัญ

บางครั้งคุณต้องการจัดวางไบต์ให้มีรูปแบบที่แน่นอน เช่น รีจิสเตอร์ฮาร์ดแวร์หรือแพ็กเก็ตเครือข่าย นั่นคือจุดที่ packed struct มีประโยชน์

Struct ปกติเพิ่มช่องว่าง

struct ปกติเปิดให้ Zig เรียงฟิลด์ใหม่และเติมช่องว่างเพื่อความเร็ว ดังนั้นขนาดในหน่วยความจำอาจใหญ่กว่าผลรวมของส่วนประกอบ

const Plain = struct {
    flag: bool,
    value: u32,
};

เริ่มใช้ packed struct

เขียน packed struct แล้ว Zig จะจัดเก็บฟิลด์ต่อเนื่องกันโดยไม่มีช่องว่าง ตามลำดับที่คุณประกาศไว้อย่างแม่นยำ

const Tight = packed struct {
    flag: bool,
    value: u7,
};

จัดเก็บในระดับบิต

packed struct วัดขนาดเป็น bits ไม่ใช่ไบต์ ฟิลด์ด้านบนใช้ 1 + 7 บิต จึงพอดีกับหนึ่งไบต์

มีจำนวนเต็มพื้นฐานที่แน่นอน

เนื่องจากเลย์เอาต์แน่นอน packed struct จึงมีชนิด backing integer ที่รับประกันได้ ซึ่งเก็บบิตทั้งหมดไว้ด้วยกัน

const Flags = packed struct {
    a: bool,
    b: bool,
    rest: u6,
};

แปลงเป็นจำนวนเต็ม

ใช้ @bitCast เพื่อเปลี่ยน packed struct เป็นจำนวนเต็มพื้นฐาน ทำให้คุณจัดเก็บหรือส่งต่อเป็นตัวเลขดิบได้

const f = Flags{ .a = true, .b = false, .rest = 0 };
const bits: u8 = @bitCast(f);

แปลงกลับอีกครั้ง

@bitCast แบบเดียวกันสามารถอ่านจำนวนเต็มกลับเป็น packed struct โดยถอดรหัสบิตดิบให้กลายเป็นฟิลด์ที่มีชื่อและใช้งานได้

const raw: u8 = 0b0000_0001;
const f: Flags = @bitCast(raw);

ตรวจสอบขนาดที่แน่นอน

ใช้ @bitSizeOf เพื่อยืนยันว่า packed struct ใช้จำนวนบิตตรงตามที่คาดไว้ โดยไม่มีช่องว่างซ่อนอยู่

const n = @bitSizeOf(Flags); // 8

ลำดับการประกาศคือเลย์เอาต์

ใน packed struct ฟิลด์แรก จะใช้บิตลำดับต่ำสุด ลำดับคือเลย์เอาต์ ดังนั้นให้ประกาศฟิลด์ตามที่รูปแบบข้อมูลกำหนดอย่างเคร่งครัด

เหมาะอย่างยิ่งกับโพรโทคอล

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

ข้อแลกเปลี่ยนที่ควรรู้

การบีบอัดระดับบิตอาจทำให้การเข้าถึงฟิลด์ช้ากว่า struct ปกติเล็กน้อย ใช้ packed เฉพาะเมื่อเลย์เอาต์ที่แน่นอนมีความสำคัญจริง ๆ 🧩

ตรวจสอบอย่างรวดเร็ว

Packed struct รับประกันอะไรเกี่ยวกับฟิลด์ของมัน

ทบทวน

คุณได้เรียนรู้ว่า packed struct ให้เลย์เอาต์ระดับบิตที่แน่นอนและไม่มีช่องว่าง มีจำนวนเต็มพื้นฐาน และแปลงด้วย @bitCast ได้ เหมาะอย่างยิ่งกับรูปแบบไบนารี 🎉

เริ่มต้นได้ฟรี

เรียนรู้ Zig ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ”

จัดวางบิตโดยไม่มีช่องว่างเติม คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ
  2. จำนวนเต็มความกว้างตามต้องการ เช่น u3
  3. ฟิลด์บิตและแฟล็ก
  4. extern struct และโครงสร้างหน่วยความจำตาม ABI
← กลับไปที่ Zig Academy