J'ai un microcontrôleur d'échantillonnage de nombreux ADC, et l'envoi des mesures sur une radio à un très faible débit, et la bande passante devient un problème.Manière efficace de créer/décompresser de grands champs de bits dans C?
Actuellement, chaque ADC ne nous donne que 10 bits de données, et il est stocké dans un entier de 16 bits. Existe-t-il un moyen facile de les emballer de manière déterministe, de sorte que la première mesure soit au bit 0, la seconde au bit 10, la troisième au bit 20, etc.?
Pour aggraver les choses, le microcontrôleur est peu endian, et je n'ai aucun contrôle sur l'endianness de l'ordinateur de l'autre côté.
EDIT: Jusqu'à présent, j'aime @ réponse de MSN le meilleur, mais je vais répondre aux commentaires
@EvilTeach: Je ne sais pas si le motif binaire exact serait utile, ou comment pour mieux le formater avec du texte seulement, mais je vais y réfléchir.
@Jonathan Leffler: Idéalement, je placerais 8 valeurs de 10 bits dans 10 octets de 8 bits. Si cela rend le traitement plus facile, je me contenterais de 3 valeurs dans 4 octets ou 6 valeurs dans 8 octets (bien que les 2 soient équivalents à moi, même quantité de bits gaspillés)
Je pense qu'il serait utile, pour montrer un diagramme de votre modèle de bits entrants, et les résultats souhaités. – EvilTeach
Les «champs de bits» et «portabilité» vont rarement ensemble dans la même phrase d'une manière positive; les champs de bits ne sont pas portables. Essayez-vous d'intégrer des valeurs de 3 x 10 bits dans un entier de 32 bits ou de 6 x 10 bits dans un entier de 64 bits, ou essayez-vous d'être contigu sur des plages de mémoire plus longues? –