我想将弱嵌入式系统的函数名称发送到主机以进行调试。由于两者是通过RS232连接的,带宽比较小,所以我不想按字面意思发送函数名。有大约 15 个字符长的函数名称,有时我想以相当高的速率发送这些名称。
我想到的解决方案是找到一个散列函数,将这些函数名称散列为一个字节,然后只发送这个字节。主机将扫描源中的所有函数,使用相同的函数计算它们的散列,然后将散列转换为原始字符串。
哈希函数必须是
- 短字符串无冲突。
- 简单(因为我不想在我的嵌入式系统中使用太多代码)。
- 适合单个字节
显然,它不需要以任何方式保证安全,只要不发生冲突即可。所以我不认为使用与密码学相关的哈希函数值得他们的复杂性。
示例代码:
int myfunc() {
sendToHost(hash("myfunc"));
}
然后主机将能够向我显示执行 myfunc
函数的时间列表。
是否有一些已知的哈希函数满足上述条件?
编辑:
- 我假设我将使用远少于 256 个函数名称。
- 我可以使用多个字节,两个字节就足够了。
- 我更喜欢使用散列函数而不是在客户端和服务器上使用相同的函数到字节映射,因为 (1) 我在客户端上没有映射实现,而且我不确定我是否想要放一个用于调试目的。 (2) 它需要我的构建链中的另一个工具将函数名称表注入(inject)我的嵌入式系统代码。哈希在这方面更好,即使这意味着我会在很多时候发生一次碰撞。
最佳答案
Minimal perfect hashing guarantees that n keys will map to 0..n-1 with no collisions at all.
包含 C 代码。
关于c - 短字符串的哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1233063/