<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi,<br>
    <br>
    I need to specify 7-byte unsigned integer field in packed structure.
    To my surprise, this turned out to be not an easy thing to do across
    win32/win64 bit codebase.<br>
    <br>
    Here's the test code<br>
    <br>
    <code>program structtest;</code><code><br>
    </code><code><br>
    </code><code>TYPE Struct1Byte = bitpacked record</code><code><br>
    </code><code>      Field : $00..$FF;</code><code><br>
    </code><code>     end;</code><code><br>
    </code><code><br>
    </code><code>     Struct2Byte = bitpacked record</code><code><br>
    </code><code>      Field : $00..$FFFF;</code><code><br>
    </code><code>     end;</code><code><br>
    </code><code><br>
    </code><code>     Struct3Byte = bitpacked record</code><code><br>
    </code><code>      Field : $00..$FFFFFF;</code><code><br>
    </code><code>     end;</code><code><br>
    </code><code><br>
    </code><code>     Struct4Byte = bitpacked record</code><code><br>
    </code><code>      Field : $00..$FFFFFFFF;</code><code><br>
    </code><code>     end;</code><code><br>
    </code><code><br>
    </code><code>     Struct5Byte = bitpacked record</code><code><br>
    </code><code>      Field : $00..$FFFFFFFFFF;</code><code><br>
    </code><code>     end;</code><code><br>
    </code><code><br>
    </code><code>     Struct6Byte = bitpacked record</code><code><br>
    </code><code>      Field : $00..$FFFFFFFFFFFF;</code><code><br>
    </code><code>     end;</code><code><br>
    </code><code><br>
    </code><code>     Struct7Byte = bitpacked record</code><code><br>
    </code><code>      Field : $00..$FFFFFFFFFFFFFF;</code><code><br>
    </code><code>     end;</code><code><br>
    </code><code><br>
    </code><code>begin</code><code><br>
    </code><code> Writeln('SizeOf(Struct1Byte) = ',SizeOf(Struct1Byte));</code><code><br>
    </code><code> Writeln('SizeOf(Struct2Byte) = ',SizeOf(Struct2Byte));</code><code><br>
    </code><code> Writeln('SizeOf(Struct3Byte) = ',SizeOf(Struct3Byte));</code><code><br>
    </code><code> Writeln('SizeOf(Struct4Byte) = ',SizeOf(Struct4Byte));</code><code><br>
    </code><code> Writeln('SizeOf(Struct5Byte) = ',SizeOf(Struct5Byte));</code><code><br>
    </code><code> Writeln('SizeOf(Struct6Byte) = ',SizeOf(Struct6Byte));</code><code><br>
    </code><code> Writeln('SizeOf(Struct7Byte) = ',SizeOf(Struct7Byte));</code><code><br>
    </code><code>end.</code><code><br>
    </code><br>
    Here's what it produces when built for Win32<br>
    <br>
    SizeOf(Struct1Byte) = 1<br>
    SizeOf(Struct2Byte) = 2<br>
    SizeOf(Struct3Byte) = 3<br>
    SizeOf(Struct4Byte) = 4<br>
    <b>SizeOf(Struct5Byte) = 8</b><b><br>
    </b><b>SizeOf(Struct6Byte) = 8</b><b><br>
    </b><b>SizeOf(Struct7Byte) = 8</b><b><br>
    </b><br>
    Here's what for Win64<br>
    <br>
    SizeOf(Struct1Byte) = 1<br>
    SizeOf(Struct2Byte) = 2<br>
    SizeOf(Struct3Byte) = 3<br>
    SizeOf(Struct4Byte) = 4<br>
    <b>SizeOf(Struct5Byte) = 5</b><b><br>
    </b><b>SizeOf(Struct6Byte) = 6</b><b><br>
    </b><b>SizeOf(Struct7Byte) = 7</b><b><br>
    </b><br>
    Am I misusing bitpacked records somehow, or does this qualify as a
    bug?<br>
    <br>
    // Gennadiy.<br>
  </body>
</html>