mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-03-08 06:24:44 +01:00
41 lines
1 KiB
Zig
41 lines
1 KiB
Zig
const std = @import("std");
|
|
const native_endian = @import("builtin").target.cpu.arch.endian();
|
|
const expectEqual = std.testing.expectEqual;
|
|
|
|
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 expectEqual(2, @sizeOf(Full));
|
|
try expectEqual(2, @sizeOf(Divided));
|
|
const full = Full{ .number = 0x1234 };
|
|
const divided: Divided = @bitCast(full);
|
|
try expectEqual(0x34, divided.half1);
|
|
try expectEqual(0x2, divided.quarter3);
|
|
try expectEqual(0x1, divided.quarter4);
|
|
|
|
const ordered: [2]u8 = @bitCast(full);
|
|
switch (native_endian) {
|
|
.big => {
|
|
try expectEqual(0x12, ordered[0]);
|
|
try expectEqual(0x34, ordered[1]);
|
|
},
|
|
.little => {
|
|
try expectEqual(0x34, ordered[0]);
|
|
try expectEqual(0x12, ordered[1]);
|
|
},
|
|
}
|
|
}
|
|
|
|
// test
|