102 votes

Comment cette personne a le code "Hello World" avec Microsoft Paint?

Je viens de voir ceci dans les derniers jours et ne peut pas comprendre comment il fonctionne. La vidéo dont je parle c'est ici:

C'est le top rated réponse à partir de ce Débordement de Pile question: Pourquoi ce programme a été rejeté par trois compilateurs?

Comment est-ce bitmap en mesure de montrer un programme C++ pour "Hello World"?

58voto

Matteo Italia Points 53117

Un BMP (DIB) l'image est composée d'un en-tête suivi par non compressé1 les données de couleur (pour 24 bpp images 3 octets par pixel, stockées dans le sens inverse de ligne de commande et avec 4 octets de la ligne de foulée).

Les octets de données de couleur sont utilisés pour représenter les couleurs (c'est à dire aucun d'entre eux sont "mandaté" par le format de fichier2, ils viennent tous de la couleur de chaque pixel), et il y a une parfaite correspondance 1:1 entre les couleurs des pixels et d'octets écrits dans le fichier; ainsi, en utilisant parfaitement les couleurs choisies, vous pouvez écrire ce que vous voulez dans le fichier (à l'exception de l'en-tête).

Lorsque vous ouvrez le fichier généré dans le bloc-notes, la couleur, les données seront affichées sous forme de texte; vous pouvez toujours voir clairement à partir de l'en-tête (la partie à partir de BM le début du texte), qui est mandaté par le format de fichier.

À mon avis, cette vidéo a été fait de cette façon: d'abord, l'auteur a calculé la taille nécessaire pour le bitmap, et créé un DIB fichier de la taille correcte remplis avec une couleur qui se développe à un modèle simple (par exemple, tous les octets de 65 ans => 'A'); ensuite remplacé avec un tel modèle avec la "charge utile" de code, comme le montre la vidéo.

Notez cependant qu'il n'est pas impossible, à la main, de l'artisanat le tout avec le bloc - notes avec le sélecteur de couleur de dialogue, une table ASCII et une connaissance de base de la DIB format, il peut être fait, mais il serait beaucoup beaucoup plus lente et sujette à erreur.

Plus d'infos sur le format DIB


  1. Il y a RLE comprimé Fric, mais dans ce cas non compressé images sont utilisées (et ils sont utilisés vraiment rarement de toute façon).
  2. À l'exception de la foulée, qui a été évité à l'aide de lignes multiple de 4 octets.

20voto

Andrew Grimm Points 22996

Je suppose que vous faites allusion à la réponse à l'une des poisson d'avril de questions.

Ma conjecture est que chaque pixel a une représentation binaire. Et que chaque caractère dans le code source a une représentation binaire.

La personne qui a créé le programme doit avoir travaillé la couleur de chaque pixel qui auraient une représentation binaire qui me correspondent à chaque personnage.

6voto

Sergey Orshanskiy Points 1180

À partir d'une théorie de l'informatique point de vue, il serait intéressant de se demander, si chaque programme peut être écrit de telle manière que, considérée comme une image bitmap, vous avez réellement vu le code source qui fait la même chose. Si vous êtes sérieusement intéressé à de tels résultats, lire par exemple sur le Kleene du théorème de point fixe.

Programme-comme-une-image peut également être considérée comme une forme de code de l'obscurcissement. Non pas qu'il a été particulièrement pratique...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X