gpt4 book ai didi

c - 如何处理二进制数据中的 Windows/Unix EOF 警告?

转载 作者:可可西里 更新时间:2023-11-01 11:27:28 26 4
gpt4 key购买 nike

我正在执行 cmp -l file.bin file2.bin 但开始得到 cmp: EOF on file 并怀疑 Windows/Linux 行结束问题如 here 所述.我应该按某种顺序拆分二进制数据,所以我做了一些分析。我注意到这个问题只是关于我的一些大小为 1GB 的文件。

od -c file.bin 的输出

0435500  \n   <A5>  \n   Y  \n   f  \n   p  \n   <A9>  \n   A  \n   W  \n 202
0435520 \n <B0> \n M \n t \n 202 \n <B1> \n i \n i \n 227
0435540 \n 221 \n Y \n ; \n <B2> \n 225 \n < \n J \n 217
0435560 \n <A9> \n < \n 211 \n <AB> \n 201 \n T \n y \n 204
0435600 \n 212 \n \ \n v \n p \n | \n 9 \n M \n u
0435620 \n 214 \n < \n r \n <A0> \n <AF> \n X \n W \n 204
0435640 \n <A5> \n B \n a \n 207 \n <AA> \n S \n ^ \n |
0435660 004 \r \n > 003 <ED> 003 <E8> \f . 003 <EC> \f * 004 032
0435700 \f h \f m \f i \f h \n o 004 024 \n k \n <A5>
0435720 \n <A2> \n = \n k \n p \n <B1> \n I \n ^ \n y
0435740 \n 227 \n < \n T \n | \n 224 \n 8 \n w \n 202

您在第 0435660 行看到 \r\n 的一个输出。当 60 个字符的总行数为 0571520 时,11 匹配 11 行。因此,Windows 行尾似乎是文件内容的 0.001%,这比正常情况下要小得多。只是少数文件有这个问题,原始数据源没有。这表明我这是数据处理中的问题。这足以确认这些结尾是 Windows 行结尾吗?

我的文件包含每个应该有固定长度的事件。所以我不确定 dos2unix 在这里的效果如何,因为我无法更改事件的长度。我想我需要删除那些具有 Windows 行尾的事件或将 Windows EOF \r\n 替换为 \0\n。但是,我不确定是否可以通过将文字字符串添加到内容中而不更改某些事件的长度来做到这一点。情况是,如果我更改某些事件的长度,系统将停止工作。

如何处理二进制数据中的 Windows/Unix EOF 警告?

最佳答案

cmp 命令打印一条消息:

cmp: EOF on SHORTER-FILE

如果一个文件是另一个文件的前缀,即如果一个文件比另一个文件短并且较短的文件与较长文件的开头相同.

如果两个文件的长度不同,但较短的文件不是较长文件的前缀,cmp 将报告它们不同的第一个字节偏移量,而不会发出 EOF 警告。

在我的系统上,cmp(1) 手册页没有提到这一点,但它提到了完整的文档,确实如此。

如果 GNU diffutils 信息文档没有安装,或者配置不正确,info 命令回退到显示手册页。

在 CentOS 5.11(本质上与 Red Hat 相同)上,info diff 显示了 diffutils 文档;导航到“调用 cmp”会显示 cmp 命令的文档。但它是文档的旧版本,缺少有关 EOF 消息的信息。 (diffutils 2.8.1 手册没有提到 EOF 消息;diffutils 3.3 手册有。)检查 git repo 中的历史记录, 该措辞于 2002 年添加,并首次包含在版本 2.8.2 中。要查看您正在运行的 GNU cmp 版本,请键入 cmp --version。 (行为一直存在;文档已更新以反射(reflect)它。)

OSX cmp(1) man page也是 GNU diffutils 版本;它指的是 info 文档,但它似乎也适用于版本 2.8.1,其中未提及 EOF 消息。

当前 GNU diffutils 版本的文档:http://www.gnu.org/software/diffutils/manual/html_node/Invoking-cmp.html

POSIX 要求相同的行为:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cmp.html

关于c - 如何处理二进制数据中的 Windows/Unix EOF 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31223334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com