Yep, this confuses every C programmer.
C’s packed
is Zig’s extern
with individual align
for a field/fields.
Zig’s packed
is more like bit-fields, for example:
const std = @import("std");
const PackedStruct = packed struct {
f1: u3,
f2: u3,
f3: u1,
};
pub fn main() void {
std.debug.print("bitSizeOf(PackedStruct) = {}\n", .{@bitSizeOf(PackedStruct)});
std.debug.print("sizeOf(PackedStruct) = {}\n", .{@sizeOf(PackedStruct)});
std.debug.print("alignOf(PackedStruct) = {}\n", .{@alignOf(PackedStruct)});
}
This will print
bitSizeOf(PackedStruct) = 7
sizeOf(PackedStruct) = 1
alignOf(PackedStruct) = 1
Also there was a topic about re-interpreting byte array as a struct and about byte-order conversion.