【问题标题】:compare two binary files using strcmp() in c Languagec语言中使用strcmp()比较两个二进制文件
【发布时间】:2020-12-19 13:11:13
【问题描述】:

对不起,我的英语不好。

我有两个二进制文件。

我将二进制文件分别存储到缓冲区中。

然后我使用 strcmp() 比较了两个缓冲区。

strcmp() 的结果为零。

所以我认为两个二进制文件是相同的。

打开两个二进制文件,然后检查是否没有差异。

但我发现差别不大。

有什么问题?

strcmp() 函数没有正确的方法来比较二进制和二进制?

【问题讨论】:

  • 你知道二进制和字符串的区别。您确实注意到存在差异,尽管很小。你有什么不明白的?
  • 当你用一个为文本而不是二进制制作的工具测试它们时,为什么你认为两个二进制文件是相同的?

标签: c file binary strcmp


【解决方案1】:

C 函数strcmp 用于比较字符串。在 C 中,字符串是 char 指针或数组,以空字节 ('\0') 结尾。因此,比较只上升到第一个空字节。

例子:

文件A:"abcd\0efg" 档案B:"abcd\0xyz"

由于两个文件都等于空字节,因此这些位置的“字符串”是相等的,尽管后面的内容可能不同。您应该改用函数memcmp参见tutorial;参见the reference 中的示例)。

编辑: 正如此答案下的评论所指出的以及其他答案中所述,strcmpmemcmp 的手册页是从标准库中了解这些功能的可靠资源。

【讨论】:

  • 手册页是了解更多关于memcmp() 的更好来源。
  • @12431234123412341234123 我以为我在第二句话中指出了这一点?至于手册页,你是对的:)
  • 从不链接到教程点。这很糟糕。这是关于它的咆哮。 stackoverflow.com/a/55731680/6699433
  • 谢谢@klutt,我把它换成了另一个来源
【解决方案2】:

你不能使用字符串函数比较二进制数据。

您需要改用memcmp

https://man7.org/linux/man-pages/man3/memcmp.3.html

【讨论】:

  • 但是我将二进制存储到缓冲区中。
  • ... 然后与字符串方法比较。
  • 你总是在一些缓冲区中存储一些东西。缓冲区并不神奇
猜你喜欢
  • 2011-06-14
  • 2017-07-26
  • 1970-01-01
  • 2018-04-28
  • 2011-12-10
  • 1970-01-01
  • 2016-06-29
  • 2021-08-17
  • 2013-11-28
相关资源
最近更新 更多