【问题标题】:Check if file data is binary检查文件数据是否为二进制
【发布时间】:2011-02-11 08:03:42
【问题描述】:

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

【问题讨论】:

  • 您如何查看数据以确定其显示方式?
  • 要检测文件是 ASCII 文本还是二进制文件(至少有一定的可信度),请参阅这个问题:stackoverflow.com/questions/277521/…
  • @Michael 我正在使用记事本查看。

标签: c++


【解决方案1】:

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

另一种说法是:

int(1) = 1 

同时

int('A') = 65

看看它们在编译器中有何不同?

【讨论】:

    【解决方案2】:

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

    正如 Anders 所暗示的,您通常可以将文件作为文本读取,而不管其中包含什么内容 - 但是,这些字符可能没有意义。

    假设您正在编写软件来执行此任务,也许以下(高级)算法会有所帮助:

    1. 创建一个您认为可以作为文本的字符列表
    2. 读取文件,将其解释为 ASCII
    3. 如果文件中的任何字符不在您的列表中,则失败。
    4. 对您要处理的任何文本编码(ASCII、UTF-x 等)重复第 2 步和第 3 步
    5. 如果没有通过,则不是文本。

    这有帮助吗?

    【讨论】:

      【解决方案3】:

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

      当您在控制台中对文件(或 CAT 或您拥有的任何操作系统)执行 TYPE 时,文件的内容默认被解释为文本,因为 TYPE 的程序员决定这样编写。

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

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

      【讨论】:

      • 所以我看到了 ASCII 字符,因为它们被记事本解释为字符(每个 1 BYTE)。如果是整数 (int),其长度为 4 BYTE。
      • @Gates127 - 如果您想将整数作为文本读取,您可能不想实际将整数写入文件 - 您想将该整数的文本表示形式写入文件.也就是说(使用您的数字),而不是写入值 12,345,678(4 个字节),您要写入“12345678”(8 个字节)。
      • 我想我明白了,一个整数被保存为 4 个字节,它可能不存在于 ASCII 表中,所以记事本无法解释它。而 ASCII 字符的范围是 0 - 255。
      • 是的,差不多就是这样。 :)
      猜你喜欢
      • 2011-03-06
      • 2022-01-13
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      相关资源
      最近更新 更多