#! perl -slw use strict; use Inline C => Config => BUILD_NOISY => 1,; use Inline C => <<'END_C', NAME => 'bitfields', CLEAN_AFTER_BUILD =>0; #include "mytypes.h" union { struct { unsigned b00:1; unsigned b01:1; unsigned b02:1; unsigned b03:1; unsigned b04:1; unsigned b05:1; unsigned b06:1; unsigned b07:1; unsigned b08:1; unsigned b09:1; unsigned b10:1; unsigned b11:1; unsigned b12:1; unsigned b13:1; unsigned b14:1; unsigned b15:1; unsigned b16:1; unsigned b17:1; unsigned b18:1; unsigned b19:1; unsigned b20:1; unsigned b21:1; unsigned b22:1; unsigned b23:1; unsigned b24:1; unsigned b25:1; unsigned b26:1; unsigned b27:1; unsigned b28:1; unsigned b29:1; unsigned b30:1; unsigned b31:1; } bits; U32 uint; } X; U32 test( SV *unused ) { X.uint = 0x01234567; printf( "%u\n", X.uint ); printf( "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", X.bits.b00 ? '1' : '0', X.bits.b01 ? '1' : '0', X.bits.b02 ? '1' : '0', X.bits.b03 ? '1' : '0', X.bits.b04 ? '1' : '0', X.bits.b05 ? '1' : '0', X.bits.b06 ? '1' : '0', X.bits.b07 ? '1' : '0', X.bits.b08 ? '1' : '0', X.bits.b09 ? '1' : '0', X.bits.b10 ? '1' : '0', X.bits.b11 ? '1' : '0', X.bits.b12 ? '1' : '0', X.bits.b13 ? '1' : '0', X.bits.b14 ? '1' : '0', X.bits.b15 ? '1' : '0', X.bits.b16 ? '1' : '0', X.bits.b17 ? '1' : '0', X.bits.b18 ? '1' : '0', X.bits.b19 ? '1' : '0', X.bits.b20 ? '1' : '0', X.bits.b21 ? '1' : '0', X.bits.b22 ? '1' : '0', X.bits.b23 ? '1' : '0', X.bits.b24 ? '1' : '0', X.bits.b25 ? '1' : '0', X.bits.b26 ? '1' : '0', X.bits.b27 ? '1' : '0', X.bits.b28 ? '1' : '0', X.bits.b29 ? '1' : '0', X.bits.b30 ? '1' : '0', X.bits.b31 ? '1' : '0' ); return X.uint; } END_C my $uint = test( 1 ); print unpack 'b*', pack 'V', $uint; print unpack 'B*', pack 'V', $uint; __END__ C:\test>bitFields.pl 19088743 11100110101000101100010010000000 11100110101000101100010010000000 01100111010001010010001100000001