One issue with the little-endian bit order is that it is poorly compatible with the implicit prefix alignment. By “implicit prefix alignment” I mean this: Proposed change to variable-length arrays, note that it is applicable not only to arrays but to unions also.
Suppose we have a definition containing a variable-length array like this:
void5
uint8[<8] a
Or a definition containing a union of 8 fields:
void5
MyUnion.1.0 a
Denote the void bits v
, the implicit prefix bits i
, and the value bits a
. The current, big-endian rule results in the following layout:
vvvvviii aaaaaaaa ...
Whereas the proposed little-endian rule results in the following layout:
iiivvvvv aaaaaaaa ...
Observe that only the former (i.e., current format) is equivalent to:
iiiiiiii aaaaaaaa ...
Only the current format allows implementations to substitute a pattern like voidX + [u]intY
with [u]int(X+Y)
.
This is not a major advantage, obviously, but the gains of the little-endian format are not high either.
As a reference, here is an implementation of the little-endian format in PyUAVCAN: https://github.com/UAVCAN/pyuavcan/pull/99