Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这个人是如何编码的;“你好,世界”;用微软油漆?_C++_C_Paint - Fatal编程技术网

C++ 这个人是如何编码的;“你好,世界”;用微软油漆?

C++ 这个人是如何编码的;“你好,世界”;用微软油漆?,c++,c,paint,C++,C,Paint,在过去的几天里,我刚刚看到了这一点,不知道它是如何工作的。我谈论的视频是: 它来自于这个堆栈溢出问题: 这个位图如何显示“Hello World”的C++程序?< /P> < P>我假设你是指四月愚人问题的答案。 我猜每个像素都有一个二进制表示。源代码中的每个字符都有一个二进制表示 创建程序的人必须计算出每个像素的颜色,该像素具有对应于每个字符的二进制表示。BMP(DIB)图像由一个标题和未压缩的1个颜色数据组成(对于24个bpp图像,每像素3个字节,以相反的行顺序存储,行跨距为4个字节) 颜

在过去的几天里,我刚刚看到了这一点,不知道它是如何工作的。我谈论的视频是:

它来自于这个堆栈溢出问题:


这个位图如何显示“Hello World”的C++程序?< /P> < P>我假设你是指四月愚人问题的答案。 我猜每个像素都有一个二进制表示。源代码中的每个字符都有一个二进制表示

创建程序的人必须计算出每个像素的颜色,该像素具有对应于每个字符的二进制表示。

BMP(DIB)图像由一个标题和未压缩的1个颜色数据组成(对于24个bpp图像,每像素3个字节,以相反的行顺序存储,行跨距为4个字节)

颜色数据的字节用于表示颜色(即,没有一个是文件格式2“强制”的,它们都来自每个像素的颜色),并且像素颜色和文件中写入的字节之间有一个完美的1:1对应关系;因此,使用完美选择的颜色,您实际上可以在文件中写入任何您想要的内容(头除外)

在记事本中打开生成的文件时,颜色数据将显示为文本;您仍然可以清楚地看到文件格式要求的标题(从
BM
到文本开头的部分)

在我看来,这段视频是这样完成的:首先,作者计算了位图所需的大小,并创建了一个大小正确的DIB文件,其中填充了扩展为简单模式的颜色(例如,所有字节65=>
'a'
);然后将这种模式替换为“有效载荷”代码,如视频所示

但是请注意,用记事本手工制作整个过程并非不可能——通过颜色选择器对话框、ASCII表格和DIB格式的基本知识,可以完成,但速度要慢得多,而且容易出错


  • 有RLE压缩的DIB,但在这种情况下使用未压缩的位图(而且很少使用)
  • 除了步幅,使用4字节的倍数行可以避免这种情况

  • 从理论计算机科学的角度来看,如果每一个程序都能以这样一种方式编写,那么从位图的角度来看,你实际上看到了做同样事情的源代码,这将是一个有趣的问题。如果您对这些结果非常感兴趣,请阅读例如关于


    作为图像的程序也可以看作是一种代码模糊处理。并不是说它特别实用…

    位图值只是文件中的位。如果您将这些位解释为ASCii,那么它将显示一些内容。仔细选择位,您可以在位图中写入字母或结构(对文件头进行模化)。有什么不明白的?这只是一件愚蠢的事情,就像世界上最糟糕的编辑器一样。不管它值多少钱,至少源代码是用图像表示的。不是说这个特定的图像可以使用它,而是…你正在寻找的动画GIF线程正在扼杀我的浏览器(IE和Chrome)-有比动画GIF更好的方式发布视频。@MusiGenesis哦,我是如何记住2011年的问题的。+1:最后,字节就是字节。记事本将它们解释为文本字符,而mspaint将它们解释为位图中的像素。首要的“垃圾”文本是附加图像信息(可能是分辨率、版本等)。