master
 1const std = @import("std");
 2const native_endian = @import("builtin").target.cpu.arch.endian();
 3const expect = std.testing.expect;
 4
 5const Full = packed struct {
 6    number: u16,
 7};
 8const Divided = packed struct {
 9    half1: u8,
10    quarter3: u4,
11    quarter4: u4,
12};
13
14test "@bitCast between packed structs" {
15    try doTheTest();
16    try comptime doTheTest();
17}
18
19fn doTheTest() !void {
20    try expect(@sizeOf(Full) == 2);
21    try expect(@sizeOf(Divided) == 2);
22    const full = Full{ .number = 0x1234 };
23    const divided: Divided = @bitCast(full);
24    try expect(divided.half1 == 0x34);
25    try expect(divided.quarter3 == 0x2);
26    try expect(divided.quarter4 == 0x1);
27
28    const ordered: [2]u8 = @bitCast(full);
29    switch (native_endian) {
30        .big => {
31            try expect(ordered[0] == 0x12);
32            try expect(ordered[1] == 0x34);
33        },
34        .little => {
35            try expect(ordered[0] == 0x34);
36            try expect(ordered[1] == 0x12);
37        },
38    }
39}
40
41// test