2

我正在编写一个后缀数组排序,这个算法将一个标记字符附加到原始字符串。此字符不得在原始字符串中。

由于该算法将处理二进制文件字节,是否有任何特殊字节字符可以确保在任何二进制文件中都找不到?如果存在,我如何在 C++ 编码中表示这个字符?

我在linux上,我不确定它是否有所作为。

4

3 回答 3

2

不,那里没有。二进制文件可以包含字节值的每个组合。不过,我不会称它们为“字符”,因为它们是二进制数据,而不是(必然)代表字符。但无论名称如何,它们都可以具有任何价值。

于 2011-06-13T21:14:02.623 回答
0

文件只能包含位。比特组可以解释为 ASCII 字符、浮点数、JPEG 格式的照片,以及任何你能想象到的东西。解释基于您选择的编码方案(例如 ASCII、BCD)。如果您的编码方案没有填满整个可能的代码表,您可以为您的特殊目的选择一个(例如,数字可以天真地编码为 4 位,2^4=16,因此您有 6 个冗余代码字)。

于 2011-06-13T21:18:04.757 回答
0

这更像是一个你应该自己回答的问题。我们不知道您拥有哪些二进制数据,哪些字符可以存在,哪些不能。如果您谈论的是通用二进制数据 - 可能有位和字节以及字符的任意组合,因此没有这样的字符。

从另一个角度来看,您正在谈论字符串。什么样的弦?ASCII 字符串?例如,ASCII 代码的范围非常有限,因此您可以使用 128。一些旧协议将 SOH ( \1) 用于类似目的。因此,如果您确切知道正在处理的字符串,则可能有一种解决方法。

据我所知,后缀数组不能应用于任意二进制数据(嗯,可以,但没有任何意义)。

于 2011-06-13T21:21:53.747 回答