const std = @import("std"); const native_endian = @import("builtin").target.cpu.arch.endian(); const expect = std.testing.expect; const Full = packed struct { number: u16, }; const Divided = packed struct { half1: u8, quarter3: u4, quarter4: u4, }; test "@bitCast between packed structs" { try doTheTest(); try comptime doTheTest(); } fn doTheTest() !void { try expect(@sizeOf(Full) == 2); try expect(@sizeOf(Divided) == 2); const full = Full{ .number = 0x1234 }; const divided: Divided = @bitCast(full); try expect(divided.half1 == 0x34); try expect(divided.quarter3 == 0x2); try expect(divided.quarter4 == 0x1); const ordered: [2]u8 = @bitCast(full); switch (native_endian) { .big => { try expect(ordered[0] == 0x12); try expect(ordered[1] == 0x34); }, .little => { try expect(ordered[0] == 0x34); try expect(ordered[1] == 0x12); }, } } // test