2010-04-23 158 views
3

当我向二进制文件写入数字时,它不会显示。但是在一个角色的情况下,它确实如此。为什么?你将如何检查包含字符的文件是否是二进制文件?检查文件数据是否为二进制文件

+0

您如何查看数据以确定其显示方式? – 2010-04-23 00:49:27

+0

用于检测文件是ASCII文本还是二进制文件(至少具有某种程度的置信度),请参阅此问题:http://stackoverflow.com/questions/277521/how-to-identify-the-file-content-is -in-ascii-or-binary#277538 – 2010-04-23 00:49:56

+0

@Michael我正在使用记事本来查看它。 – Gates127 2010-04-23 00:51:44

回答

4

它与你如何解释文件中的内容有关。文件中的所有内容都是二进制的,字符是整数等。

当您在文件(或CAT或任何操作系统具有)的控制台上执行TYPE时,文件的内容默认会被解释为文本,因为程序员类型的决定写它那样。

当您编写程序读取文件中的数据时,由您决定如何解读数据。

这就是为什么你只能猜测文件内容,这就是为什么经常使用文件扩展名来提示内容应该如何解释的提示。

+0

所以我看到了ASCII字符,因为它们被记事本解释为字符(每个1 BYTE)。如果是整数(int),则其长度为4 BYTE。 – Gates127 2010-04-23 01:01:53

+0

@ Gates127 - 如果您想将整数作为文本读取,您可能不希望将整数写入文件 - 您希望将该整数的文本表示写入文件。这是(使用你的数字),而不是写入值12,345,678(4字节),你想写“12345678”(8字节)。 – Damovisa 2010-04-23 01:05:30

+0

我想我明白了,一个整数被保存为4个字节,它可能不存在于ASCII表中,所以记事本无法解释它。而ASCII字符的范围是从0到255. – Gates127 2010-04-23 01:15:11

1

我想你真正要问的是你(个人)是否可以解释文件中的内容。

正如安德斯所提到的那样,通常可以将文件读取为文本,而不管其内容是什么 - 然而,这些字符可能没有意义。

假设你正在编写软件来执行这项任务,或许下面(高级别)算法将帮助:

  1. 创建你找到文本
  2. 读取文件可接受的字符的列表,将其解释为ASCII
  3. 如果文件中的任何字符不在列表中,则失败。
  4. 对要处理的任何文本编码(ASCII,UTF-x等)重复步骤2和3
  5. 如果没有任何内容通过,则不是文本。

这有帮助吗?

1

好的,我相信我可以回答你的问题。数字在记事本中显示为垃圾的原因是因为您保存了一个整数值 - 保存ascii代码为0-9,其中包含时髦的字符与它们相关联。保存一个字符时,它会保存该字符的实际ASCII值(它将字符视为一个转换为其ASCII值的数字),然后该字符将显示为您希望看到的字符。

另一种方式把它是:

int(1) = 1 

int('A') = 65 

如何看它们之间的区别到编译器?

相关问题