【问题标题】:reading a file stored in storage or memory读取存储在存储器或内存中的文件
【发布时间】:2018-10-27 08:04:21
【问题描述】:

数字、二进制格式文件或其他格式文件中的所有内容都存储为 0 1

因此,当我们尝试使用十六进制编辑器打开一个执行文件时,它可以显示所有随机 ASCII 字符,这些字符将基于随机创建该(任何)文件的 7、0 1 位生成,因为它是 0 1 在存储,在内存中。

那么为什么它会显示不是 ASCII 字符的奇怪字符呢?

十六进制阅读器不只是每 7 位或 8 位解析 7 位?它读取文件中的一些元数据,然后根据它读取?

【问题讨论】:

  • 在句首编辑一个大写单词有利于声誉,han!

标签: binaryfiles


【解决方案1】:

您的十六进制编辑器选择将字节解码为 ASCII 而非其他字符编码。

你是对的,ASCII 字符集有 128 个代码点,ASCII 字符编码将它们编码为 0 到 127 范围内的单个字节。由于任意文件中的字节范围可以从 0 到 255,而 ASCII 字符集不是用于文本文件,解码为 ASCII 不会像更可能的字符编码那样显示更多关于潜在文本的信息,并且只会显示关于二进制文件一半值的信息。

十六进制编辑器的工作是显示并允许您编辑字节。额外的演示和编辑功能是额外的功能。许多确实显示文本,有些允许搜索和替换文本。有些甚至可以处理其他数据格式,例如十进制整数、多字节整数、浮点数等。

没有文本,只有编码文本。因此,要支持文本,十六进制编辑器和任何其他程序(包括编译器)必须选择或允许您选择字符编码。对于无法使用该编码解码的字节值,通常会在十六进制编辑器的文本显示中替换点或问号。

如果您没有找到您的十六进制编辑器使用哪种字符编码,您可以通过创建一个字节值为 0 到 255 的文件来测试它,查看它显示的内容并将其与许多 possibilities 进行匹配。它可能是您的操作系统用于“默认”的一种。在 Windows cmd 中,转到chcp;在 Linux 终端中,转到locale

【讨论】:

  • 不完全是我所追求的,但对我来说很有知识,谢谢。
  • @jak0010 请edit您的问题澄清您在寻找什么。
  • 再看一遍,现在可以了。
  • 还有一件事,是否有任何文件系统在文件开头提供一些代码、元或...以显示其编码?这是我更喜欢寻找和感兴趣的人
  • 否;该信息必须在发送者和接收者之间理解。根据文件类型,有标准(例如,JSON 使用 UTF-8)、常见做法(C# 代码文件使用 UTF-8)、检测算法 (XML)、有效性测试(每个文本文件都是有效的 CP437、 ISO 8859-1,……但不是每个都是有效的 UTF-8 或 UTF-16 或 UTF-32),……。请记住,您将检查样品。如果稍后更新文件内容,您的猜测可能不兼容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多