读取编码文件

时间:2018-06-04 22:48:38

标签: windows file

我试图读取像图像这样的文件,但是当我尝试用记事本打开它们时,我发现了奇怪的代码:

ÿH‹\$0H‹t$8HƒÄ _ÃÌÌÌÌÌÌH‰\$H‰l$H‰t$ WAVAWHƒì ·L

Click here to see the image

所以我有以下问题:

  1. 为什么我会找到那些奇怪的符号而不是零和一些?
  2. 程序员是为安全性还是优化而这样做的?
  3. 这是一个像ASCII这样的编码,每个符号都有一个唯一的十进制和二进制数关联吗?
  4. 任何拥有相应解码器的人都可以阅读此信息吗?
  5. 谢谢

1 个答案:

答案 0 :(得分:1)

大多数数据文件(如图片)都存储为hexadecimal。如果您知道文件的格式,可以使用十六进制编辑器(我使用HexEdit)来查看数据。

颜色通常存储为RGB,表示红色,绿色或蓝色,例如,这是一个深红色:

80 00 00 // (there are no spaces in the real file format, but hex editors add them.)

图像的格式取决于图像的存储方式。大多数图像格式都有编码像素之间差异的方法而不是实际像素本身,因为不同像素之间存在大量信息冗余。

例如,如果我有一张聚焦在月球上的夜空照片,那么在一个角落可能有一个大的区域,它们的颜色大致相同;没有优化的编码意味着很多文件只会读到:

9080b09080b09080b09080b09080b09080b09080b59080b59080b5...

在这种情况下,灰色略带蓝紫色,最后趋向于更亮的蓝色。我在这里将它存储为RGB - R:90,G:80,B:b0 - 但该存储也有其他格式。 Try them out here.

而不是列出每个像素,我可以同样地说“6大量的蓝灰色然后它变得更亮蓝色”:

=6x9080b0+3x000005+...

这减少了我需要传输的信息量。大多数优化都不是人类可读的,但是它们在类似的行上运行(这是一般信息原则,用于各种事物,如.zip文件,而不仅仅是图像)。

请注意,这仍然是无损格式;我总能回到实际的像素完美图像。 Bitmaps(。bmp)是无损的(虽然显然仍然是数字的;它们永远不会捕获人类看到的一切)。

许多格式使用图像的频率对信息进行编码。这有点像看波浪形式的音乐,除了它是二维的。根据采样频率,信息可能很容易丢失(通常是)。 JPEGs(.jpg)使用这样的有损压缩。

您看到ASCII字符的原因是因为某些值恰好与ASCII文本代码一致。这纯属巧合;记事本正在尽力解释什么是基本的胡言乱语。例如这个颜色序列:

4e4f424f4459

恰好与字母“NOBODY”重合,但也代表彼此相邻的两个像素。两者都是灰色的,特别是左边(R:4e,G:4f,B:42),最右边的是蓝色(R:4f,G:44,B:59)。

但是,只有当你的格式存储原始像素信息时......这是昂贵的,所以情况可能并非如此。

图像格式是一个非常专业的领域。着名的XKCD漫画"Digital Data"展示了其中一些漫画的优化。这就是为什么,一般来说,你不应该使用JPEG作为文本,而是使用类似PNG(。png)的内容。