This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author vstinner
Recipients Alexander.Belopolsky, Jake.Coffman, amaury.forgeotdarc, castironpi, terry.reedy, theller, vladris, vstinner
Date 2011-07-13.16:05:38
SpamBayes Score 0.00047321164
Marked as misclassified No
Message-id <1310573138.87.0.941834501524.issue4376@psf.upfronthosting.co.za>
In-reply-to
Content
I don't like your test because it depends on system endian:

+            if sys.byteorder == "little":
+                struct.menu.spam = 0x000000FF
+            else:
+                struct.menu.spam = 0xFF000000

I would prefer a test creating a structure from a byte string. Something like:
---------------------------
import ctypes

class Nested(ctypes.BigEndianStructure):
    _fields_ = (
        ('x', ctypes.c_uint32),
        ('y', ctypes.c_uint32),
    )

class TestStruct(ctypes.BigEndianStructure):
    _fields_ = (
        ('point', Nested),
    )

data = b'\0\0\0\1\0\0\0\2'
assert len(data) == ctypes.sizeof(TestStruct)
obj = ctypes.cast(data, ctypes.POINTER(TestStruct))[0]
assert obj.point.x == 1
assert obj.point.y == 2
---------------------------

Use b'\1\0\0\0\2\0\0\0' for little endian.
History
Date User Action Args
2011-07-13 16:05:38vstinnersetrecipients: + vstinner, theller, terry.reedy, amaury.forgeotdarc, castironpi, Alexander.Belopolsky, Jake.Coffman, vladris
2011-07-13 16:05:38vstinnersetmessageid: <1310573138.87.0.941834501524.issue4376@psf.upfronthosting.co.za>
2011-07-13 16:05:38vstinnerlinkissue4376 messages
2011-07-13 16:05:38vstinnercreate