Ocaml et hexadécimal
Je vois qu'il y a beaucoup de gens qui tombent sur mon blog en cherchant "ocaml hexadecimal". Et ils doivent être décus de ne rien trouver… C'est pourquoi j'ai décidé d'écrire rapidement un petit quelque chose à ce sujet là.
Tout d'abord, il faut savoir qu'en caml, les choses suivantes sont équivalentes :
# 0xf;;
- : int = 15
# 0o17;;
- : int = 15
# 0b1111;;
- : int = 15
# 15;;
- : int = 15
Le premier est écrit en hexadécimal, le second en ocal, le troisième en binaire, et le dernier en décimal. Donc la gestion de l'hexadécimal en OCaml est native.
Une des utilisations courantes de l'hexadécimal est pour représenter les couleurs en 65536 couleurs. Pour convertir un entier en tuple r,g,b on peut utiliser la fonction suivante :
Dans l'autre sens, c'est un peu plus compliqué : en effet, en mémoire tous les entiers sont stockés de la même manière (int31 à la caml), et on s'en fiche de savoir sous quelle forme ils sont entrés. Mais ce n'est pas un drame ; effectivement, on a besoin d'avoir un entier sous forme hexadécimale principalement pour l'affichage, donc on utilise les fonctions du module Printf1 :
Je vous renvoie à la documentation du module Pervasives pour plus de détails.
Espérons que maintenant ceux qui passeront ici en cherchant ocaml hexadécimal repartirons heureux ![]()
- C'est la seule exception à la règle ne jamais faire un
open Moduleen début de fichier [↩]