【问题标题】:Choosing a magic byte least likely to appear in real data选择最不可能出现在真实数据中的魔术字节
【发布时间】:2025-12-26 13:20:12
【问题描述】:

我希望这对 SO 来说不是太固执己见;它可能没有一个好的答案。

在我正在编写的库的一部分中,我有一个字节数组,其中填充了用户提供的值。这些值可能是 Float、Double、Int(不同大小)等类型,具有您可能期望 C 中的二进制表示,例如。这就是我们可以说的关于价值观的全部内容。

我有机会进行优化:我可以用字节MAGIC 初始化我的字节数组,然后只要用户提供的值的没有字节 等于MAGIC,我就可以走快路,否则我需要走慢路。

所以我的问题是:什么是选择我的魔法字节的原则方法,这样它就有可能不会出现在我收到的(各种编码和分布的)数据中?

我想,我的部分问题是,是否有类似 Benford's law 的东西可以告诉我有关字节在多种数据中的分布情况。

【问题讨论】:

  • 查看您拥有的各种编码和分布的数据并选择最不频繁的字节?如果您还没有任何数据,请让您的魔术字节变量并重新编写您的程序,以便根据您接收到的数据中最不频繁的字节每隔一段时间重新选择魔术字节?此外,幻数的长度通常超过 8 位,以增加唯一性的概率。

标签: language-agnostic byte probability magic-numbers


【解决方案1】:

从您的图书馆的应用程序将使用的各种输入中捕获真实世界的数据。

编写一个快速而肮脏的程序来分析数据集。听起来您想知道哪些字节最常被完全排除。所以程序的输出会说,对于每个字节值,有多少输入不包含它。

这与最不频繁的字节相同。在数据分析中,您需要注意准确地测量您正在测量的内容!

使用分析来定义您的架构。如果没有任何字节出现,则可以完全放弃优化。

【讨论】:

  • 如果出现次数可以为0,那么肯定和最不频繁的字节一样。不要把事情过度复杂化。 :)
  • @bzlm 如果分析程序的结果不是零,那么您必须编写一个全新的程序。这不那么复杂吗?
  • “听起来你想知道哪些字节最常被完全排除。所以程序的输出会说,对于每个字节值,有多少输入不包含它。”正确,好点!另外我想我要求太多才能选择这样一个字节而不考虑现实世界的数据可能是什么样子......
【解决方案2】:

我倾向于使用字节 255,但我发现这在 MSWord 文件中也很普遍。所以我现在使用字节 254,用于终止文件的 EOF 代码。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center