Rob Gaddi added the comment:
I was just working on similar things, and found the same problem. I can
confirm failure on both Python 2.7.4 and Python 3.3.1 running on 64-bit Linux,
and that the Windows builds do not have this problem.
My code:
from __future__ import print_function
from ctypes import *
from itertools import product
bases = (BigEndianStructure, LittleEndianStructure)
packs = (True, False)
basetypes = ( (c_uint,16), (c_ushort,16), (c_uint,32) )
print("Base Basetype pack high low size bytes")
for basetype, base, pack in product(basetypes, bases, packs):
fields = [
('high', basetype[0], basetype[1]),
('low', basetype[0], basetype[1]),
]
cls = type('', (base,), {'_pack_' : pack, '_fields_' : fields})
x = cls(high = 0x1234, low = 0x5678)
bacls = c_uint8 * sizeof(x)
ba = bacls.from_buffer(x)
s = ''.join('{0:02X}'.format(b) for b in ba)
k = '*' if (x.high != 0x1234 or x.low != 0x5678) else ''
report = "{name:25s}{basetype:10s}{pack:4d} {high:04X} {low:04X}
{size:4d} {s}{k}".format(
name = base.__name__,
high = x.high,
low = x.low,
size = sizeof(x),
pack = pack,
basetype = basetype[0].__name__,
s = s,
k = k
)
print(report)
My results:
Base Basetype pack high low size bytes
BigEndianStructure c_uint 1 0000 5678 4 00005678*
BigEndianStructure c_uint 0 0000 5678 4 00005678*
Structure c_uint 1 1234 5678 4 34127856
Structure c_uint 0 1234 5678 4 34127856
BigEndianStructure c_ushort 1 1234 5678 4 12345678
BigEndianStructure c_ushort 0 1234 5678 4 12345678
Structure c_ushort 1 1234 5678 4 34127856
Structure c_ushort 0 1234 5678 4 34127856
BigEndianStructure c_uint 1 1234 5678 8 0000123400005678
BigEndianStructure c_uint 0 1234 5678 8 0000123400005678
Structure c_uint 1 1234 5678 8 3412000078560000
Structure c_uint 0 1234 5678 8 3412000078560000
On python3, the BigEndianStructure seemingly at random will set the high or low
fields from one execution to the next, but always misses one or the other. I
have always seen high = 0, low = 0x5678 on python2.
----------
nosy: +rgaddi
versions: +Python 3.3
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue20629>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com