Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从二进制文件(如PDF)中读取文本 我在C++中读二进制文件有一个问题。目前我的代码如下: FILE *s=fopen(source, "rb"); fseek(s,0,SEEK_END); size_file size=ftell(s); rewind(s); char *sbuffer=(char *) malloc(sizeof(char) * size); if(sbuffer==NULL){ fputs("Memory error", stderr); exit(2); } size_t result=fread(sbuffer,1,size,s); if(result != size){ fputs("Reading error",stderr); exit(3); } fclose(s); cout<<sbuffer<<endl; FILE*s=fopen(源代码,“rb”); fseek(s,0,SEEK_END); 大小\文件大小=ftell(s); 倒带; char*sbuffer=(char*)malloc(sizeof(char)*size); if(sbuffer==NULL){ fputs(“内存错误”,标准); 出口(2); } 大小\u t结果=fread(sbuffer,1,大小,s); 如果(结果!=大小){ fputs(“读取错误”,标准); 出口(3); } fclose(s);; cout_C++_File Io - Fatal编程技术网

从二进制文件(如PDF)中读取文本 我在C++中读二进制文件有一个问题。目前我的代码如下: FILE *s=fopen(source, "rb"); fseek(s,0,SEEK_END); size_file size=ftell(s); rewind(s); char *sbuffer=(char *) malloc(sizeof(char) * size); if(sbuffer==NULL){ fputs("Memory error", stderr); exit(2); } size_t result=fread(sbuffer,1,size,s); if(result != size){ fputs("Reading error",stderr); exit(3); } fclose(s); cout<<sbuffer<<endl; FILE*s=fopen(源代码,“rb”); fseek(s,0,SEEK_END); 大小\文件大小=ftell(s); 倒带; char*sbuffer=(char*)malloc(sizeof(char)*size); if(sbuffer==NULL){ fputs(“内存错误”,标准); 出口(2); } 大小\u t结果=fread(sbuffer,1,大小,s); 如果(结果!=大小){ fputs(“读取错误”,标准); 出口(3); } fclose(s);; cout

从二进制文件(如PDF)中读取文本 我在C++中读二进制文件有一个问题。目前我的代码如下: FILE *s=fopen(source, "rb"); fseek(s,0,SEEK_END); size_file size=ftell(s); rewind(s); char *sbuffer=(char *) malloc(sizeof(char) * size); if(sbuffer==NULL){ fputs("Memory error", stderr); exit(2); } size_t result=fread(sbuffer,1,size,s); if(result != size){ fputs("Reading error",stderr); exit(3); } fclose(s); cout<<sbuffer<<endl; FILE*s=fopen(源代码,“rb”); fseek(s,0,SEEK_END); 大小\文件大小=ftell(s); 倒带; char*sbuffer=(char*)malloc(sizeof(char)*size); if(sbuffer==NULL){ fputs(“内存错误”,标准); 出口(2); } 大小\u t结果=fread(sbuffer,1,大小,s); 如果(结果!=大小){ fputs(“读取错误”,标准); 出口(3); } fclose(s);; cout,c++,file-io,C++,File Io,只有一些文件格式,如纯raw.TXT文本文件,可以直接“读取”和“理解”。大多数文件格式,包括几乎任何二进制格式,都是格式。这意味着文件中包含某些结构。与完全没有结构的.TXT文本文件完全相反,或者更确切地说,它是一个巨大的纯数据块 打开一个写字板或Word或任何其他文本编辑器,在其中写入一些文本,然后将其保存为RTF、DOC、ODT或任何其他非TXT文件。然后将其另存为TXT文件 下载十六进制查看器/十六进制编辑器。随便哪一个。以其中一个为例,您不需要很多功能,只需要在一列中显示原始二进制值,

只有一些文件格式,如纯raw.TXT文本文件,可以直接“读取”和“理解”。大多数文件格式,包括几乎任何二进制格式,都是格式。这意味着文件中包含某些结构。与完全没有结构的.TXT文本文件完全相反,或者更确切地说,它是一个巨大的纯数据块

打开一个写字板或Word或任何其他文本编辑器,在其中写入一些文本,然后将其保存为RTF、DOC、ODT或任何其他非TXT文件。然后将其另存为TXT文件

下载十六进制查看器/十六进制编辑器。随便哪一个。以其中一个为例,您不需要很多功能,只需要在一列中显示原始二进制值,在另一列中显示ASCII文本的功能。几乎任何免费的hex查看器/编辑器都可以做到这一点

打开并比较这两个文件。你们马上就会看到不同

回到PDF:

PDF甚至可以包含与文本交错的图形。如果文本像TXT一样“只是放在文件中”,您希望如何保存它?如何嵌入图像位置/描述/数据?如果我记得清楚的话,PDF甚至可以包含类似于JavaScripts的脚本。可执行文件。在PDF类型的文档中,您可以使用按钮来执行某些操作。这比文件中的文本要复杂得多

二进制文件通常不包含任何肉眼可读的文本。他们将文本结构化为块,包装在关于颜色、文本布局、页面等的元数据中,甚至是关于文档版本控制、创作、分类等的特殊结构中(…)。这一切都必须存储在某个地方

通常,二进制文件有节。第一部分通常称为标题。里面会有关于格式类型、格式版本、文件/块/数据长度、图像分辨率等信息。所有这些最有可能以二进制形式保存:没有“800x600”文本,只要“00 | 00 | 03 | 20 | 00 | 00 | 02 | 58 |”,假设32位为。阅读、解码和理解描述后,您将知道实际数据从何处开始,数据块如何布局,以及如何解码和理解它们包含的内容

编辑:


了解文本文件和二进制文件之间的区别后,请查看上的绝对基础知识。然后尝试使用RLE()或Huffman()来开始一些相对简单的事情。然后开始阅读更多关于哈夫曼代码的内容,然后,好吧,你将为这项任务做好合理的准备,比如ZIP或LZH。

要将PDF解析为文本,请使用一些PDF库,例如或
.

您的代码不会进行任何打印!发生什么事?!我用“coutf”打印“sbuffer”如果你用格式化输出打印任意数据,你会很倒霉的。投票以“按预期工作”结束。你在开玩笑吧?你希望你可以阅读二进制PDF文件,C++会以某种方式神奇地解码它?在十六进制编辑器中打开PDF。我相信你会看到你的程序打印出了正确的东西。如果你真的喜欢压缩主题,我已经包括了一些起始点的链接。玩得高兴我正在尝试实现一个LZ77算法,所以我尝试查看每个字符……非常感谢!为了简单起见,只需查看数据的原始字节,而不是查看字符。当您分析由字符0..9a..zA..Z!@#$%^&*组成的文本流时,几乎没有什么区别或者在分析字节流00/01/02/03/../FE/FF时。它不是半随机的~80个符号,而是输入端的半随机256个符号:)是的..目前我使用forloop将sbuffer[I]取出来,并尝试找出在前面的上下文中是否有重复,如LZ77算法所述。这是在查看原始数据字节吗?如果没有,那么要实现压缩器,我还需要将PDF解析为文本字符吗?非常感谢……是的,当使用带有
rb
标志的
fopen
时,
fread
从文件中读取原始字节,而不进行任何翻译。您的缓冲区将包含与磁盘上的文件完全相同的内容。要压缩文件,不需要解析它。如果发布某个新版本的文件,这通常过于复杂和/或有风险。>90%的压缩器只是将文件压缩为一大块字节,而忽略文件格式。有些情况下确实可以更彻底地分析文件,但这种情况很少,通常称为“压缩格式”,而不是“压缩文件”,即Flash FWS与CWS。
% P D F - 1 . 3 
 % ? ? ? ? ? ? ? ? ? ? ? 
 4   0   o b j 
 < <   / L e n g t h   5   0   R   / F i l t e r   / F l a t e D e c o d e   > > 
 s t r e a m 
 x  ? ? ? j ? 0  E ? ? ? k ?  y Q E # ? ? ? m ? & ? ? @  % + ? .     ? ?  ? ? A i  ?     4 z \ 1 G W ? ?  - , ? ? ? (  ? ? ?  9 ? ? ? ? ?  \ ? } ? ? ? e ? ? ? ? 0 ? ? ? ~ ? , ? ? & 8 ? ? x e 4 ? r 
 | ? ? ? 
          ? ? ? ? E  > a ? ? z & ? Z ? < ?  }  '  ? ? ? j p ? ? Q 7 0 ? ? ? S %  - p ? ? ? 7 D  ?  ? ? ' Q z Q ?  ? ? ? ? ? ? ? ? ? \ 2 ? ? 7 ? ? ? < ? ? D ~  ? ? ? 

 e n d s t r e a m 
 e n d o b j 
 5   0   o b j 
 2 2 8 
 e n d o b j 
 2   0   o b j