Solution de pioueo pour File Format

intro hardware radio

17 février 2024

Fainéantise et discusssion avec mon ami le bot

Être fainéant est une qualité précieuse pour tout artisan du numérique. Avoir un anglais correct également. Cela permet d’interagir efficacement avec des bots d’IA génératives.

Exemple ici avec ChatGPT 3.5 d’OpenAI, où j’ai demandé un code Python qui faisait le job par rapport à la description du challenge.

https://chat.openai.com/share/b9cba0f6-89f6-438c-bc27-b9c70f3901b7

Des retouches

Pas mal la sortie proposée. Mais il faut garder son esprit critique et faire quelques ajustements au code :

  • le byteorder='little' est à supprimer pour les lectures. Nous ne sommes pas en train d’interpréter des signaux I/Q, nous sommes en train de réordonner des paquets de 4 octets entrelacés.
  • le combined_hex.encode() génère les bytes de la chaîne hexa avec l’encodage par défaut UTF-8, ce n’est pas ce qu’on veut. Nous voulons les bytes de la chaîne hexa (comme un xxd -r quoi). Il faut donc utiliser bytes.fromhex().

Un code modifié

#!/usr/bin/env python3
      
import  hashlib

def read_IQ_file(filename):
     all_I_hex = ""
     all_Q_hex = ""
      
     with open(filename, 'rb') as file:
         while True:
             I_data = file.read(4)
             if not I_data:
                 break                                                                                             
             I_component = int.from_bytes(I_data)
             all_I_hex += format(I_component, '08x')
      
             Q_data = file.read(4)
             if not Q_data:
                 break
             Q_component = int.from_bytes(Q_data)
             all_Q_hex += format(Q_component, '08x')
      
     combined_hex = all_I_hex + all_Q_hex
     hash_object = hashlib.sha256(bytes.fromhex(combined_hex))
     sha256_hash = hash_object.hexdigest()
      
     return sha256_hash
      
# Replace 'filename.iq' with the actual filename of your I/Q file
filename = 'file-format.iq'
result_hash = read_IQ_file(filename)