C++ 检查文件数据是否为二进制

C++ 检查文件数据是否为二进制,c++,C++,当我将一个数字写入二进制文件时,它不会显示。但是对于一个角色来说,它确实是。为什么?如何检查包含字符的文件是否为二进制文件?这与如何解释文件中的内容有关。文件中的所有内容都是二进制、字符和整数等 当您在控制台中键入一个文件(或CAT或任何您拥有的操作系统)时,默认情况下,该文件的内容被解释为文本,因为该类型的程序员决定这样编写它 当您编写程序从文件中读取数据时,由您决定如何解释所读取的数据 这就是为什么你只能猜测文件内容,这就是为什么经常使用文件的扩展名来提示应该如何解释内容。我想你真正想问的是

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

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

当您在控制台中键入一个文件(或CAT或任何您拥有的操作系统)时,默认情况下,该文件的内容被解释为文本,因为该类型的程序员决定这样编写它

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


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

我想你真正想问的是你(个人)是否能够解释文件中的内容

正如安德斯所提到的,你通常可以把一个文件作为文本来阅读,而不管里面是什么——然而,字符可能毫无意义

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

  • 创建一个可接受为文本的字符列表
  • 读取文件,将其解释为ASCII
  • 如果文件中的任何字符不在列表中,则失败
  • 对要处理的任何文本编码(ASCII、UTF-x等)重复步骤2和3
  • 如果没有任何东西通过,它就不是文本

  • 这有用吗?

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

    另一种说法是:

    int(1) = 1 
    


    查看它们在编译器中的不同之处?

    如何查看数据以确定其显示方式?要检测文件是ASCII文本还是二进制文件(至少有一定程度的可信度),请查看以下问题:@Michael我正在使用记事本查看它。因此,我看到ASCII字符,因为它们被解释为字符(每个1字节)用记事本。对于整数(int),其长度为4字节。@Gates127-如果您想以文本形式读取整数,可能不想将整数写入文件-您想将该整数的文本表示形式写入文件。也就是说(使用您的数字),而不是写入值12345678(4字节),您要写入“12345678”(8字节)。我想我明白了,一个整数被保存到4字节中,它可能不存在于ASCII表中,因此记事本无法解释它。虽然ASCII字符的范围为0-255。是的,基本上就是这样。:)
    int('A') = 65