#python 3.7 from ctypes import * class TestCaseA(Union): _fields_ = [("a", c_uint32, 16), ("b", c_uint16, 8)] class TestCaseB(Union): _fields_ = [("a", c_uint32, 16), ("b", c_uint16, 16)] class TestCaseC(Union): _fields_ = [("a", c_uint32, 16), ("b", c_uint16)] def test_union(test_case): buff = bytearray(4) bitfield_union = test_case.from_buffer(buff) bitfield_union.a = 1 bitfield_union.b = 2 print("a is {}".format(bitfield_union.a)) print("b is {}".format(bitfield_union.b)) print("Buffer: {}\n".format(buff)) print("Test Case A") test_union(TestCaseA) print("Test Case B") test_union(TestCaseB) print("Test Case C") test_union(TestCaseC)