我正在编写一个后缀数组排序,这个算法将一个标记字符附加到原始字符串。此字符不得在原始字符串中。
由于该算法将处理二进制文件字节,是否有任何特殊字节字符可以确保在任何二进制文件中都找不到?如果存在,我如何在 C++ 编码中表示这个字符?
我在linux上,我不确定它是否有所作为。
不,那里没有。二进制文件可以包含字节值的每个组合。不过,我不会称它们为“字符”,因为它们是二进制数据,而不是(必然)代表字符。但无论名称如何,它们都可以具有任何价值。
文件只能包含位。比特组可以解释为 ASCII 字符、浮点数、JPEG 格式的照片,以及任何你能想象到的东西。解释基于您选择的编码方案(例如 ASCII、BCD)。如果您的编码方案没有填满整个可能的代码表,您可以为您的特殊目的选择一个(例如,数字可以天真地编码为 4 位,2^4=16,因此您有 6 个冗余代码字)。
这更像是一个你应该自己回答的问题。我们不知道您拥有哪些二进制数据,哪些字符可以存在,哪些不能。如果您谈论的是通用二进制数据 - 可能有位和字节以及字符的任意组合,因此没有这样的字符。
从另一个角度来看,您正在谈论字符串。什么样的弦?ASCII 字符串?例如,ASCII 代码的范围非常有限,因此您可以使用 128。一些旧协议将 SOH ( \1
) 用于类似目的。因此,如果您确切知道正在处理的字符串,则可能有一种解决方法。
据我所知,后缀数组不能应用于任意二进制数据(嗯,可以,但没有任何意义)。