$ > 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 ?