Go Down

Topic: comment transformer 2 btys de 8 oct en 1 de 16 ou cumuler les 2 de 8 (Read 573 times) previous topic - next topic

gef13

bonjour,

je galère un peu ...(beaucoup en fait!)

je ne trouve pas comment cumuler et non additionner deux bites de 8 octes en 1 seul de 16 octes!

je m'explique :

je récupéré Bty1 sur 8 oct en binaire et Bty2 en 8 oct en binaire aussi je dois cumuler soit lire sur 16octs la valeur binaire pour la transformer en hex ou décimale !!

voir pièce jointe (parviens pas a mètre photo)

exemple j'ai 1er byte : 0000 0001       2eme: 0000 1101
et je veux 000 0001 0000 1101 et pas (00000001+00001101) 

merci
a+ gf
Arduino leonard

papybricol

...ils embarquèrent la logique, coupèrent les cordons, alors, libérés de leurs chaînes, une immensité s'ouvrait devant eux...

skywodd

Bonjour,

Le texte façon SMS ça fait mal aux yeux ...

Ce que tu cherche à faire c'est du bitwise.
Code: [Select]
uint8_t val1, val2;
uint16_t val3;

val3 = ((uint16_t) val1 << 8) | val2;

-> Tu décales val1 de 8 bits vers la gauche (bits de poids fort) puis tu faits un OU "bits à bits" des 8 bits de poids faibles.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

fdufnews

Quote
-> Tu décales val1 de 8 bits vers la droite (bits de poids fort)

Moi j'aurais dit vers la gauche ;)

skywodd


Moi j'aurais dit vers la gauche ;)

Heu oui l'autre droite effectivement :smiley-mr-green:
J'edit, ni vue, ni connu :P
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

gef13

OK et merci pour les infos ! super

merci papybricol je te confirme ça marche nickel !!

skywodd merci a toi aussi j'avais bien essayé de transformer uint8_t en uint16_t mais pas réussi !!
j'essai avec ta formule aussi pour voir le plus simple et le moins consommateur de mémoire !!

Merci pour votre rapidité et efficacité! :D
a+
gf

Arduino leonard

skywodd


skywodd merci a toi aussi j'avais bien essayé de transformer uint8_t en uint16_t mais pas réussi !!
j'essai avec ta formule aussi pour voir le plus simple et le moins consommateur de mémoire !!

Si on y regarde de plus prés :
Code: [Select]
// Arduino.h
uint16_t makeWord(uint16_t w);
uint16_t makeWord(byte h, byte l);

#define word(...) makeWord(__VA_ARGS__)

// WMath.cpp
unsigned int makeWord(unsigned int w) { return w; }
unsigned int makeWord(unsigned char h, unsigned char l) { return (h << 8) | l; }


Donc au final ça revient à faire ma formule, mais sans le savoir ;)
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Go Up