mirror of
https://github.com/ziglang/zig.git
synced 2024-11-30 09:02:32 +00:00
42 lines
996 B
Zig
42 lines
996 B
Zig
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
|