Capteur de CO2 SCD30 : Notation "Big-Endian"
Résolu/Fermé
quattro46
Messages postés
6
Date d'inscription
jeudi 24 mars 2022
Statut
Membre
Dernière intervention
12 mai 2022
-
Modifié le 13 avril 2022 à 18:10
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 14 avril 2022 à 16:29
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 14 avril 2022 à 16:29
A voir également:
- Ne pas couvrir la zone de l'écouteur et du capteur de proximité
- Zone telechargement - Accueil - Outils
- Un ecouteur sur deux marche ✓ - Forum Audio
- Combien y a-t-il de bateaux dans la zone de 565 pixels de large et 1400 pixels de haut à partir du coin supérieur gauche de cette image ? - Forum PS4
- Jbl tune 225tws problème écouteur droit - Forum Casque et écouteurs
- Combien y a-t-il de bateaux dans la zone de 1500 pixels de large et 500 pixels de haut à partir du coin supérieur gauche de cette image ? - Guide
3 réponses
mamiemando
Messages postés
33372
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 novembre 2024
7 802
Modifié le 13 avril 2022 à 19:19
Modifié le 13 avril 2022 à 19:19
Bonjour,
Pour faire une conversion little endian - big endian, il faut réordonner les octets (bytes) comme expliqué dans cet article. En python, cela peut se faire à l'aide d'un
Cependant il y a un autre piège, et c'est sans doute ce qui t'empêche de comprendre l'exemple. Les 4 octets, une fois réordonnés, servent à encoder un
Méthode 1 : en passant par un
(Note que dans cette implémentation, je dois convertir
Résultat :
Méthode 2 : en passant par
Face à l'inélégance du constructeur de
Bonne chance
Pour faire une conversion little endian - big endian, il faut réordonner les octets (bytes) comme expliqué dans cet article. En python, cela peut se faire à l'aide d'un
bytearraycomme expliqué dans cette discussion.
Cependant il y a un autre piège, et c'est sans doute ce qui t'empêche de comprendre l'exemple. Les 4 octets, une fois réordonnés, servent à encoder un
floatet non un
int(il m'a moi même fallu un peu de temps pour comprendre, car l'exemple est mal choisi et omet la partie décimale). J'ai pu recoller les bouts grâce à la documentation complète (p19) qui donne un exemple en C, donc il m'a suffit de traduire cela en python en m'inspirant de cette discussion.
Méthode 1 : en passant par un
bytearray
import struct def le_hex_to_co2_ppm(le_hex): ba = bytearray.fromhex("%x" % le_hex) # Conversion string -> bytearray ba.reverse() # Conversion big endian -> little endian tup = struct.unpack("f", ba) # Conversion 4 octets -> float return tup[0] print(le_hex_to_co2_ppm(0x43c80000)) # Exemple que tu as cité print(le_hex_to_co2_ppm(0x43DB8C2E)) # Exemple p19
(Note que dans cette implémentation, je dois convertir
le_hexsous forme de chaîne de caractère pour initialiser
ba, c'est assez inélégant mais je n'ai pas trouvé mieux.
Résultat :
400.0
439.09515380859375
Méthode 2 : en passant par
to_bytes
Face à l'inélégance du constructeur de
bytearray, j'ai creusé et j'ai trouvé la méthode
to_bytesqui permet de faire la même chose de manière bien plus directe :
def le_hex_to_co2_ppm(le_hex): tup = struct.unpack("f", le_hex.to_bytes(4, byteorder="little")) return tup[0]
Bonne chance
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
13 avril 2022 à 12:05
13 avril 2022 à 12:05
Bonjour,
Le code ne peut pas être lu si tu n'utilises pas la balise [ <> ] pour le poster.
Néanmoins on peut y lire:
Le code ne peut pas être lu si tu n'utilises pas la balise [ <> ] pour le poster.
Néanmoins on peut y lire:
strucco2 = var[0]<<24 | var[1]<<16 | var[3]<<8 | var[4]Qui correspond à lire les 4 octets pour en faire un nombre issu de données Big-endian. Il te faut modifier cette ligne pour qu'elle devienne : lire les 4 octets pour en faire un nombre issu de données Little-endian.
quattro46
Messages postés
6
Date d'inscription
jeudi 24 mars 2022
Statut
Membre
Dernière intervention
12 mai 2022
14 avril 2022 à 15:15
14 avril 2022 à 15:15
Le capteur fonctionne ! Merci beaucoup !
mamiemando
Messages postés
33372
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 novembre 2024
7 802
14 avril 2022 à 16:29
14 avril 2022 à 16:29
Félicitations et bonne continuation :-)