How to handle fields less than one byte in a recarray
Hi Numpy forum Let me start out with a generic example: In [3]: test_byte_str = "".join(["\x12\x03", "\x23\x05", "\x35\x08"]) In [4]: desc = dtype({'names' : ["HIGHlow", "HIGH + low"], 'formats': [uint8, ui nt8]}) In [5]: r = rec.fromstring(test_byte_str, dtype=desc) In [6]: r[0] Out[6]: (18, 3) In [7]: r['HIGHlow'] Out[7]: array([18, 35, 53], dtype=uint8) In [8]: high = r['HIGHlow'] >> 4 In [9]: high Out[9]: array([1, 2, 3], dtype=uint8) In [10]: low = r['HIGHlow'] & 0x0F In [11]: low Out[11]: array([2, 3, 5], dtype=uint8) In [12]: high_plus_low = high + low In [13]: high_plus_low Out[13]: array([3, 5, 8], dtype=uint8) In [14]: r["HIGH + low"] Out[14]: array([3, 5, 8], dtype=uint8) So I have here an array, where the first byte actually represents two fields, HIGH and low, where HIGH are the four most significant bits and low are the four least significant bits. As you can see in the example I can figure out how to get an array of HIGH and low by postprocessing the recordarray, but I would really like to encapsulate this logic somehow inside the recordarray (or in an instance of derived class), such that I could access the arrays directly as r["HIGH"] and r["low"] or perhaps even better wrap it all up inside a class RWrapper, such that r = RWrapper(test_byte_str) r.low would work but not r.HIGHlow How do I implment that in a Pythonic way? My real application is considerebaly more complicated, but I think this describes the main problem.
participants (1)
-
Kim Hansen