On 26 Feb 2012, at 13:54, ik wrote: > to the following Pascal record: > > > iphdr = record > {$IFDEF ENDIAN_LITTLE} > jhl : Cardinal; // __u8 ihl:4, > version : Cardinal; // version:4
The ":4" in C means "4 bits", not 4 bytes. The correct translation in the general case for bitfields is hard, because FPC does not support C-compatible bitpacking (it depends on the type of the bitfield, e.g. "int a:4;" and "char a:4" have different alignment rules). In this case, this should match the C layout: {$packrecords c} iphdr = record bitfields = bitpacked record {$IFDEF ENDIAN_LITTLE} jhl: 0..(1 shl 4)-1; version: 0..(1 shl 4)-1; {$ELSE} jhl: 0..(1 shl 4)-1; version: 0..(1 shl 4)-1; {$ENDIF} end; tos : cuint8; tot_len : cint16; id : cint16; frag_off : cint16; ttl : cint8; protocol : cint8; check : cuint16; saddr : cint32; daddr : cint32; end; You will then of course have to use iphdrvar.bitfields.jhl instead of iphdrvar.jhl. Jonas_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal