短字符串的哈希函数

Ela*_*ich 9 c string math hash

我想将函数名从弱嵌入式系统发送到主机以进行调试.由于两者是通过带宽短的RS232连接的,我不想直接发送功能的名称.有大约15个字符长的函数名称,我有时想以相当高的速率发送这些名称.

我想到的解决方案是找到一个散列函数,它将这些函数名称散列为单个字节,并仅发送此字节.主机将扫描源中的所有函数,使用相同的函数计算其散列,然后将散列转换为原始字符串.

哈希函数必须是

  1. 短线串冲突.
  2. 简单(因为我不想在嵌入式系统中使用太多代码).
  3. 适合单个字节

显然,它不需要以任何方式保证安全,只需要无碰撞.所以我不认为使用与加密相关的哈希函数是值得的复杂性.

示例代码:

int myfunc() {
    sendToHost(hash("myfunc"));
}
Run Code Online (Sandbox Code Playgroud)

然后主持人可以向我提供myfunc执行该功能的时间列表.

是否有一些已知的哈希函数可以保持上述条件?

编辑:

  1. 我假设我将使用少于256个函数名.
  2. 我可以使用多个字节,两个字节可以让我很好.
  3. 我更喜欢使用,而不是使用客户端和服务器上同样的功能到字节映射的哈希函数,因为:(1)我在客户端上没有地图的实现,我不知道我想提出一个调试目的.(2)它需要我的构建链中的另一个工具将function-name-table注入我的嵌入式系统代码中.在这方面哈希更好,即使这意味着我会在很多时候碰撞一次.

Mar*_*n B 8

尝试最小的完美散列:

最小的完美散列保证n个键将映射到0..n-1,完全没有碰撞.

包含C代码.