C++ 写入文本文件,二进制与ascii

C++ 写入文本文件,二进制与ascii,c++,char,ascii,unsigned-char,C++,Char,Ascii,Unsigned Char,所以我最难理解这个概念。我有一个程序,可以读取一个文本文件,然后将其写入另一个文件,并用无符号字符替换最常见的单词。但我一生都无法理解的是,我如何确定两者之间的区别 如果我将读取的原始字符或对应于1-255的无符号字符值写入新文件,那么当我反向返回原始文件内容时,如何确定差异?当以二进制方式写入文件时,则使用2或4个字节写入诸如“1253553”之类的数字(取决于平台上int的大小)因此,在二进制文件中,您将看到一个由2或4个字节组成的序列来表示该数字。对于chars,它不应该有什么区别,因为每

所以我最难理解这个概念。我有一个程序,可以读取一个文本文件,然后将其写入另一个文件,并用无符号字符替换最常见的单词。但我一生都无法理解的是,我如何确定两者之间的区别


如果我将读取的原始字符或对应于1-255的无符号字符值写入新文件,那么当我反向返回原始文件内容时,如何确定差异?

当以二进制方式写入文件时,则使用2或4个字节写入诸如“1253553”之类的数字(取决于平台上
int
的大小)因此,在二进制文件中,您将看到一个由2或4个字节组成的序列来表示该数字。对于
char
s,它不应该有什么区别,因为每个
char
都表示在一个字节上。

通常,您必须有一些众所周知的、显而易见的方法来确定文件的格式

一种方法是创建您自己的文件扩展名。您可能天真地认为任何具有该扩展名的文件都是您的压缩格式,但实际上很可能其他文件具有相同的扩展名(例如,“.dat”可能是一个错误的选择)。因此,您需要采取进一步的步骤,比如让文件的前几个字节成为任何其他文件中都不可能存在的字节(一些“幻数”)。让我们使用两个字节,然后简单地选择0xAB 0xCD作为这两个字节

因此,当您的程序显示一个具有正确扩展名的文件时,请打开它并读取前两个字节。如果它们是0xAB和0xCD,则可以假定您正在读取特殊格式

这不是一个很好的完成这项任务的方法,但它是一种方法。如果你愿意,你可以变得更加奢侈


有关更多信息,您可能需要阅读。这是一个开始。

给出一个示例输入和您想要的相应输出。从您的帖子中,很难确定您要做什么。示例将提供答案的参考,并帮助他们解决您可能遇到的任何困惑。您想做什么“将最常用的单词替换为无符号字符"意思是?“带无符号字符”你是指原始二进制数据与人类可读文本,对吗?我的意思是,我一次在文本文件中读取一个字符,如果该单词、标点或空格对应于密钥库中的某个内容,那么它将用无符号字符替换该标点或单词,以表示1-255个最常见单词的列表。但是我很难理解的是,当我返回并尝试从这个压缩文件转到原始文件时。我如何确定我是否正在读取这些未签名字符中的一个,比如一个字中的字符。我正在使用不同的文件类型作为压缩版本。但压缩文件不是完全压缩的,只是部分压缩。压缩的部分SED被压缩为1-255之间的无符号字符字节,因为这是列表中要压缩的字数。如果不压缩字符,它只是作为我从原始文件中读取的字符添加。是的,还有?就像你在问题中所说的,你需要一种方法来识别文件是这种格式的。我已经给了你有一些选项,也有其他选项,但你需要想出一些方法。有没有其他软件可以读取你的压缩文件?人类应该能够读取它吗?也许只需添加一个关键字(就像维基百科页面上说.gif文件在开始时使用
GIF87a
)到文件的开头。问题不是确定我想要的文件,我已经根据文件的扩展名将其内置到其中。我的问题是,当我读取此文件时,如何确定该字符是我根据密钥列表添加的未签名字符之一,还是仅是直接从原始文件写入文件的字符之一。这是这是一个压缩/解压缩应用程序。在特殊字符前面加上类似于空字符(0)的字符,只需确保0不会出现在其他任何地方。然后当遇到它时,您就知道下一个字符是“特殊的”。难道没有其他方法不向文件添加更多内存吗?我有一个朋友试图向我解释,将变量与0进行比较可以达到目的,但我在测试程序中尝试了,但没有成功。有关查看ASCII文本或十进制值的内容。