Hexadécimal et encodage du texte

Petit test programmé :

Trois questions « flash » : que fait ce code ?

plein = "255 "
vide = "0 "

with open('fichier.ppm','w') as f:
    f.write("P3\n# fichier crée en NSI\n")
    f.write(" 3 2\n# Palette de 255 :\n255\n")
    for i in range(3) :
        f.write(plein + vide *3)
    f.write(plein *5 + vide)
    f.close()

Il donne ce fichier fichier.ppm qui contient :

P3
# fichier crée en NSI
3 2
# Palette de 255 :
255
255 0 0 0 255 0 0 0 255 0 0 0 255 255 255 255 255 0

Et en l’ouvrant dans Gimp et en zoomant à 12800 %, on obtient cette image de six pixels :

cm 2019-12-18 - NSI - fichier_ppm

Et celui-là ?

from random import randint

l = randint(8, 15)
h = randint(8, 15)

with open('fichier.pgm','w') as f:
    f.write("P2\n# fichier crée en NSI\n")
    f.write(str(l)+' '+str(h))
    f.write("\n# Palette de 255 :\n255\n")
    for y in range(h-1):
        intensite = randint(0, 7) * 32
        chaine = str(intensite) + ' '
        f.write(chaine * l)
    f.write("255 " * l)
    f.close

Il donne (par exemple, c’est aléatoire) un fichier fichier.pgm qui contient :

P2
# fichier crée en NSI
13 14
# Palette de 255 :
255
0 0 0 0 0 0 0 0 0 0 0 0 0 
64 64 64 64 64 64 64 64 64 64 64 64 64 
192 192 192 192 192 192 192 192 192 192 192 192 192 
160 160 160 160 160 160 160 160 160 160 160 160 160 
192 192 192 192 192 192 192 192 192 192 192 192 192 
64 64 64 64 64 64 64 64 64 64 64 64 64 
32 32 32 32 32 32 32 32 32 32 32 32 32 
224 224 224 224 224 224 224 224 224 224 224 224 224 
224 224 224 224 224 224 224 224 224 224 224 224 224 
96 96 96 96 96 96 96 96 96 96 96 96 96 
64 64 64 64 64 64 64 64 64 64 64 64 64 
160 160 160 160 160 160 160 160 160 160 160 160 160 
96 96 96 96 96 96 96 96 96 96 96 96 96 
255 255 255 255 255 255 255 255 255 255 255 255 255

Et en l’ouvrant dans Gimp et en zoomant pas mal, on obtient cette image (ici de 13 \times 14 = 182 pixels) en niveaux de gris :

cm 2019-12-18 - NSI - fichier_pgm

Et celui-là ?

with open('craquage_complet.ppm','w') as f:
    f.write("P3\n# fichier crée en NSI après craquage\n")
    f.write(" 16 16\n# Palette de 255 :\n255\n")
    for y in range(16) :
        for x in range(16):
            pixel = str(x * 16 + 14) + ' '
            pixel += str(y * 16 + 14) + ' '
            pixel += str(255 - x * y) + ' '
            f.write(pixel)
    f.close()

Il donne un fichier craquage_complet.ppm qui contient :

P3
# fichier crée en NSI après craquage
 16 16
# Palette de 255 :
255
14 14 255 30 14 255 46 14 255 62 14 255 78 14 255 94 14 255 110 14 255 126 14 255 142 14 255 158 14 255 174 14 255 190 14 255 206 14 255 222 14 255 238 14 255 254 14 255 14 30 255 30 30 254 46 30 253 62 30 252 78 30 251 94 30 250 110 30 249 126 30 248 142 30 247 158 30 246 174 30 245 190 30 244 206 30 243 222 30 242 238 30 241 254 30 240 14 46 255 30 46 253 46 46 251 62 46 249 78 46 247 94 46 245 110 46 243 126 46 241 142 46 239 158 46 237 174 46 235 190 46 233 206 46 231 222 46 229 238 46 227 254 46 225 14 62 255 30 62 252 46 62 249 62 62 246 78 62 243 94 62 240 110 62 237 126 62 234 142 62 231 158 62 228 174 62 225 190 62 222 206 62 219 222 62 216 238 62 213 254 62 210 14 78 255 30 78 251 46 78 247 62 78 243 78 78 239 94 78 235 110 78 231 126 78 227 142 78 223 158 78 219 174 78 215 190 78 211 206 78 207 222 78 203 238 78 199 254 78 195 14 94 255 30 94 250 46 94 245 62 94 240 78 94 235 94 94 230 110 94 225 126 94 220 142 94 215 158 94 210 174 94 205 190 94 200 206 94 195 222 94 190 238 94 185 254 94 180 14 110 255 30 110 249 46 110 243 62 110 237 78 110 231 94 110 225 110 110 219 126 110 213 142 110 207 158 110 201 174 110 195 190 110 189 206 110 183 222 110 177 238 110 171 254 110 165 14 126 255 30 126 248 46 126 241 62 126 234 78 126 227 94 126 220 110 126 213 126 126 206 142 126 199 158 126 192 174 126 185 190 126 178 206 126 171 222 126 164 238 126 157 254 126 150 14 142 255 30 142 247 46 142 239 62 142 231 78 142 223 94 142 215 110 142 207 126 142 199 142 142 191 158 142 183 174 142 175 190 142 167 206 142 159 222 142 151 238 142 143 254 142 135 14 158 255 30 158 246 46 158 237 62 158 228 78 158 219 94 158 210 110 158 201 126 158 192 142 158 183 158 158 174 174 158 165 190 158 156 206 158 147 222 158 138 238 158 129 254 158 120 14 174 255 30 174 245 46 174 235 62 174 225 78 174 215 94 174 205 110 174 195 126 174 185 142 174 175 158 174 165 174 174 155 190 174 145 206 174 135 222 174 125 238 174 115 254 174 105 14 190 255 30 190 244 46 190 233 62 190 222 78 190 211 94 190 200 110 190 189 126 190 178 142 190 167 158 190 156 174 190 145 190 190 134 206 190 123 222 190 112 238 190 101 254 190 90 14 206 255 30 206 243 46 206 231 62 206 219 78 206 207 94 206 195 110 206 183 126 206 171 142 206 159 158 206 147 174 206 135 190 206 123 206 206 111 222 206 99 238 206 87 254 206 75 14 222 255 30 222 242 46 222 229 62 222 216 78 222 203 94 222 190 110 222 177 126 222 164 142 222 151 158 222 138 174 222 125 190 222 112 206 222 99 222 222 86 238 222 73 254 222 60 14 238 255 30 238 241 46 238 227 62 238 213 78 238 199 94 238 185 110 238 171 126 238 157 142 238 143 158 238 129 174 238 115 190 238 101 206 238 87 222 238 73 238 238 59 254 238 45 14 254 255 30 254 240 46 254 225 62 254 210 78 254 195 94 254 180 110 254 165 126 254 150 142 254 135 158 254 120 174 254 105 190 254 90 206 254 75 222 254 60 238 254 45 254 254 30

Et en l’ouvrant dans Gimp et en zoomant pas mal (3200 %), on obtient cette image (ici de 13 \times 14 = 182 pixels) en niveaux de gris :

cm 2019-12-18 - NSI - craquage_complet

On s’y intéresse d’un peu plus près :

cm 2019-12-18 - NSI - création images ppm et pgm et hexadecimal puis texte_1


Reprise du cours : représentation des données (6)

III. La notation hexadécimale

Où l’on découvre aussi le codage des couleurs :

cm 2019-12-18 - NSI - création images ppm et pgm et hexadecimal puis texte_2

En fait, l’hexadécimal, c’est la base 16 !

Comme le binaire est la base 2, et le shadok la base 4.

On remplit donc des poubelles de 16 !

Et puisqu’il faut 16 chiffres, de 0 à 15 :

  • le A remplace le 10,
  • le B remplace le 11,
  • le C remplace le 12,
  • le D remplace le 13,
  • le E remplace le 14,
  • le F remplace le 15.

Lecture directe sur le binaire :

On peut « lire » l’héxadécimal sur le binaire directement en découpant l’octet en deux paquets de quatre bits et lisant les quatre bits de poids forts comme s’ils étaient de poids faible.

cm 2019-12-18 - NSI - création images ppm et pgm et hexadecimal puis texte_3

IV. Et le texte ?

On décode ce poème en ASCII, ce qui était à faire pour aujourd’hui !

cm 2019-12-18 - NSI - création images ppm et pgm et hexadecimal puis texte_4

On s’est aidé de ce tableau.

Exercice : encoder « Quelle tête à claque, cet énergumène ! » en latin-1 pendant les congés

  • en décimal,

  • et en binaire,

  • en hexadécimal.

On pourra s’aider de ce tableau :

latin1

noel

                           \  _  /
                            (\o/)
                        ---  / \  ---
                              ^
                             ^^0
                            ^0^^^
                           ^^^^^^^
                          0^^^0^^0^
                         ^^^^^^0^^^^
                        ^^^^0^0^^0^^^
                       ^^^^^^^^^^^^^^^
                      0^^^^^^^^^^^^^^^^
                     ^^^^^^^^0^^0^^^^^^^
                    ^^^^^^^^^^^^^^^0^^^0^
                   ^0^^^^^^^^^^0^^^^^^^^^^
                  ^^^^^^^^^^^0^00^^^^^^^^^0
                 ^^^^0^0^^^0^^^^^^^^^^0^^^^^
                0^^^^^^^^^^^^^^^^^^^^0^0^0^^^
               0^^^^^^0^^^^^0^^^^^^^^^^0^^^0^^
              ^^^^^^^^^^^^^^^^^^^^^^^^0^^^^^^^^
             ^^^^^^^0^^^^^0^^^^^^^^^^^^^^^^00^^^
            ^0^^^^^^^^^^^^^^^^^^^^^^^^^^0^^^^^^^^
           ^^^000^^^^^^^^^^0^^0^^^^^0^^^^0^^^^^^^^
          0^^0^^^^^^^0^^^^^^^^^^^^^0^00^^^^^^^^^^0^
         ^^^^^^^^^^^^00^^^^0^^^^^^^^^^^^^^^0^^^^^^^^
        ^^^^^^^^0^^^^^^^^00^^0^^^^^0^^^^^^0^^^^^^0^0^
       ^^^^^^^^^^^^^^^^^^^^^^^0^^^^^^^^^^^^^^^0^^^^0^^
      ^^^^^^^^^^^^^^^^^0^^^^^^^^^^0^0^0^^^^^^^^^^^^^^^^
     ^^^^0^^^^^^0^^^^^^^^^^^^^^^^^^^^^^^^^^^^0^^^^^^^^^^
    ^^^^^^^^^^^^^^^^^^^^^^^0^^^^^^^^^^^^^^^^^^^^^^^^0^^^^
   ^^^^^^^^^^^^0^^^^^^^^^^^0^^^^^^^^^^^0^^^^^0^^^^^^^^^^^^
  ^^^^^^^00^^^^^^^0^^^^^^^^^^^^^^^^^^^^^^^^^^^^0^^^^^^^^^^^
 ^^^^^^^^^^^^0^^^^0^^^^^^^^^^^^0^^^^^^^^^0^^^^^^^^^^^^^^^^^^
                              ###
                              ###
                              ###
                              ###
                              ###
                            *******
                            *******
 ___   ___         ___                         ___   ___
  |   |   |   \ /  |     |  |  \ /     |\  |  |   |  |    |
  |   |   |    |   |--   |  |   o      | \ |  |   |  |--  |
 _|   |___|    |   |__   |__|  / \     |  \|  |___|  |__  |__

N'hésitez-pas à poser une question, ou faire avancer le schmilblick

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.