New issue 2066: ctypes.BigEndianStructure does not appear to swap byte order on PyPy https://bitbucket.org/pypy/pypy/issue/2066/ctypesbigendianstructure-does-not-appear
David Wilson: When run on a little endian machine, the output of the following script differs between CPython and PyPy: ```` import sys import ctypes FIELDS = [ ('n', ctypes.c_uint16) ] class Native(ctypes.Structure): _fields_ = FIELDS class Big(ctypes.BigEndianStructure): _fields_ = FIELDS class Little(ctypes.LittleEndianStructure): _fields_ = FIELDS def dostruct(c): ba = ctypes.create_string_buffer(ctypes.sizeof(c)) ms = c.from_buffer(ba) ms.n = 0xff00 return repr(ba[:]) print 'Native', dostruct(Native) print 'Big', dostruct(Big) print 'Little', dostruct(Little) if sys.byteorder == 'little': assert dostruct(Native) == dostruct(Little) elif sys.byteorder == 'big': assert dostruct(Native) == dostruct(Big) else: assert 0, 'typo' ```` On CPython, we see that the byte order of `Big` is swapped: ```` python p2.py Native '\x00\xff' Big '\xff\x00' Little '\x00\xff' ```` Whereas on PyPy 2.6.0 it is not the case: ```` Native '\x00\xff' Big '\x00\xff' Little '\x00\xff' ```` _______________________________________________ pypy-issue mailing list pypy-issue@python.org https://mail.python.org/mailman/listinfo/pypy-issue