<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>