使用PHP返回二进制文件中的十六进制差异

时间:2014-10-06 23:14:30

标签: php binary hex diff

我已阅读并尝试了每个答案here,但它们似乎只适用于非二进制格式的字符串。我正在尝试比较二进制文件中的差异,并返回格式如下:

[file1]

-0001010: ac 0f 00 00 01 00 00 00 48 65 6c 6c 6f 2c 20 77  ........Hello, w

[file2]

+0001010: ac 0f 00 00 01 00 00 00 48 75 6c 6c 6f 2c 20 77  ........Hullo, w

xdiff可以很好地创建bdiff补丁和修补文件 - 我看起来也说明了差异。

$one = 'one'; // original file
$two = 'two'; // updated file
$pat = 'dif'; // bdiff patch
$new = 'new'; // new destfile

xdiff_file_diff_binary($one, $two, $pat);
xdiff_file_patch_binary($one, $pat, $new);

$diff = xdiff_file_diff($one, $two, 1);
if (is_file($diff)) {
    echo "Differences:\n"; // result = 1 
    echo $diff;
}

也许xdiff不是正确的扩展名吗?我不确定。

1 个答案:

答案 0 :(得分:0)

听起来像PHP中的屁股一样巨大的痛苦,我可以建议以下bash单行吗?

diff <(hexdump -C file1) <(hexdump -C file2)

输出:

10c10
< 00000090  35 35 61 34 32 62 62 31  30 33 31 62 38 38 39 34  |55a42bb1031b8894|
---
> 00000090  35 35 61 34 32 62 62 31  30 33 31 61 38 38 39 34  |55a42bb1031a8894|

您可以随时查看diffhexdump的选项。