diff options
Diffstat (limited to 'src/common/endianness.c')
-rwxr-xr-x | src/common/endianness.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/common/endianness.c b/src/common/endianness.c index 32bb65a..5c9b183 100755 --- a/src/common/endianness.c +++ b/src/common/endianness.c @@ -25,8 +25,42 @@ +/****************************************************************************** +* * +* Paramètres : target = lieu d'enregistrement de la lecture. [OUT] * +* data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* low = position éventuelle des 4 bits visés. [OUT] * +* endian = ordre des bits dans la source. * +* * +* Description : Lit un nombre non signé sur 4 bits. * +* * +* Retour : Bilan de l'opération : true en cas de succès, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool read_u4(uint8_t *target, const bin_t *data, off_t *pos, off_t len, bool *low, SourceEndian endian) +{ + if ((len - *pos) < 1) return false; + + if (*low) + { + *target = data[*pos] & 0x0f; + *low = false; + } + else + { + *target = (data[*pos] & 0xf0) >> 4; + *low = true; + *pos += 1; + } + return true; +} /****************************************************************************** |