Michael Beckerle created DAFFODIL-1888:
------------------------------------------

             Summary: byteOrder bigEndian with bitOrder 
leastSignificantBitFirst combination
                 Key: DAFFODIL-1888
                 URL: https://issues.apache.org/jira/browse/DAFFODIL-1888
             Project: Daffodil
          Issue Type: New Feature
          Components: Back End, Front End
            Reporter: Michael Beckerle
             Fix For: deferred


The SISO-J data format requires the 4th combination of byteOrder and bitOrder 
which DFDL v1.0 currently disallows. DFDL workgroup discussions suggest this 
restriction will just be lifted. 

This is a good feature for someone new to Daffodil to implement.

This format, which is a envelope format for an envelope-and-payload style of 
data, describes data as bigEndian, but LSBF.

https://www.sisostds.org/DesktopModules/Bring2mind/DMX/Download.aspx?Command=Core_Download&EntryId=43048&PortalId=0&TabId=105

Thanks to Marshall Miller of Quark Security for this insight. This item 
extracted from the dev@daffodil.apache.org mailing list.

One can workaround this problem in Daffodil by way of 
dfdl:inputValueCalc/dfdl:outputValueCalc and hidden groups. But that is, 
perhaps, unsatisfying.

Example:

Data is comprised of 3 unsigned integer bitfields:
slot1 is 12 bits
slot2 is 32 bits
slot3 is 20 bits

Given an input with the following bytes in hex:
01 23 45 67 89 AB CD EF

Parsed results need to be (in hex):
slot1: 0567
slot2: DEF01234
slot3: 089ABC

Explanation of results:

Since the bit fields need to consume data in a leastSignificantBitFirst
order, it is easier to represent the input in right-to-left order
where bits are consumed starting at the right and moving toward the
left.  Since words are 4 bytes, and in big endian order, the lowest
bit in the 4th byte is the first bit to be consumed.  Reordering the
input data and consuming data from right to left yields the correct
field boundaries.

89 AB CD EF 01 23 45 67      parse fields right to left
05 06 07 08 01 02 03 04      input byte position

slot1 consumes the right 3 nibbles, slot2 consumes the next 8 nibbles,
and slot3 consumes the left 5 nibbles.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to