Да, но почему? Ведь при использовании LE значительно упрощается работа по разбору формата. Смотрите сами:
const void *lenPtr = ...;
uint32_t len = *((uint32_t*)lenPtr); // for 4-byte length
len &= 0xFFFFFF; // for 3-byte length
uint16_t len = *((uint16_t*)lenPtr); // for 2-byte length
uint8_t len = *((uint8_t*)lenPtr); // for 1-byte length
0 0 1 0
.Т.е. это все-таки ожидаемое поведение, разве нет?
Вы же используете типаж в своем последнем примере, т.е. copy-paste. Чему вы удивляетесь? Вполне ожидаемое поведение.