Déterminer le type d’un fichier dont on n’a pas le nom
Dans le projet sur lequel on bosse, on a une couche en Java qui appelle du code natif en C. Quand on télécharge une image, on récupère au final un buffer que l'on va faire passer à la couche C pour décompression/conversion bien comme il faut pour notre eBook.
Seulement voilà, la fonction générique ne prend qu'un buffer et sa taille comme argument, du coup le hack qui avait été mis en place était de dire que par défaut c'est un PNG, et puis si jamais libpng se chie dessus, on teste autre chose. Bon, un peu crado, et pas super efficace.
En fait il est possible de déterminer si c'est un PNG ou un JPG assez facilement, puisque ceux-ci ont toujours les mêmes entêtes... En regardant les 4 ou 8 premiers octets, on sait donc à quoi on a affaire. Simple, et efficace. Comme j'avais la flemme je me suis basé uniquement sur les 4 premiers, et du coup voilà ce que je recherche :
Pour trouver ce genre d'infos, vous avez plusieurs solutions. La première est bien entendue d'afficher les premiers octets du fichier (ou de l'ouvrir dans un éditeur type bloc-note), mais la seconde est de faire ça proprement et d'aller voir sur http://www.wotsit.org/ pour obtenir de vraies informations officielles sur les formats de fichier, le stockage des données à l'intérieur, etc.