packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ
จัดวางบิตโดยไม่มีช่องว่างเติม
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ
- จำนวนเต็มความกว้างตามต้องการ เช่น u3
- ฟิลด์บิตและแฟล็ก
- extern struct และโครงสร้างหน่วยความจำตาม ABI