Skip to content

Instantly share code, notes, and snippets.

@jerefrer
Created October 2, 2015 08:46
Show Gist options
  • Save jerefrer/03c9985e95ac6d81b3b4 to your computer and use it in GitHub Desktop.
Save jerefrer/03c9985e95ac6d81b3b4 to your computer and use it in GitHub Desktop.
$ > data = "45973294435a352c55d6cbf0"
=> "45973294435a352c55d6cbf0"
$ > bytes = data.scan(/../).map(&:hex)
=> [69, 151, 50, 148, 67, 90, 53, 44, 85, 214, 203, 240]
$ > bytes[8].to_f / 2 - 27
=> 15.5 # Température
$ > bytes[9].to_f / 50
=> 4.28 # Voltage batterie
# Jusqu'ici tout va bien
# ===================================
# Tentative de calcul du CRC
$ > crc1 = bytes[0, 10].reduce(:+) # Méthode fonctionnelle donnant un résultat identique à votre boucle
=> 971
$ > crc2 = 10 * bytes[9] # Méthode donnant un résultat identique à votre boucle
=> 2140
$ > crc1 != bytes[10]
=> true # Evidémment, comment un seul byte pourrait être au dessus de 255 ?
$ > crc2 != bytes[11]
=> true # Evidémment, comment un seul byte pourrait être au dessus de 255 ?
# J'imagine qu'ici il doit y avoir un calcul binaire quelconque qui entre en jeu,
# seulement de votre code je n'arrive pas à comprendre la logique.
# De plus votre code indique "if ((CRC1 != the_byte[10]) & (CRC2 != the_byte[11]))"
# Avec un seul & au lieu de &&. Est-ce volontaire ?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment