用于二进制数据的glib哈希函数

时间:2015-01-14 15:09:32

标签: c glib

我正在尝试使用glib来构建哈希表,键将是一些二进制字符串。

我无法使用内置函数g_str_hash (),因为它是C字符串(空终止)。不能使用内置函数g_direct_hash (),因为它只需要一个指针。无法指定密钥的长度,这也是我无法提供自己的哈希函数版本的原因(因为它将采用两个参数:指向密钥和长度的指针来生成密钥hash,什么是对函数指针类型GHashFunc)。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

使用g_bytes_new(或类似内容)将您的数据和长度放入GBytes struct,并使用提供的g_bytes_hash()g_bytes_equal()initialize the hash table

  

GBytes可以来自许多不同的来源,这些来源可能有不同的程序来释放内存区域。例如g_malloc()的内存,内存片,GMappedFile或其他分配器的内存。

     

GBytes可以很好地作为GHashTable中的键。使用g_bytes_equal()和g_bytes_hash()作为g_hash_table_new()或g_hash_table_new_full()的参数。通过将g_bytes_compare()函数传递给g_tree_new(),GBytes也可以用作GTree中的键。

如果您的数据是固定宽度并且额外的内存困扰您,您可以编写自己的GHashFuncGEqualFunc作为薄包装器,暂时将您的数据放入GBytes结构中以便使用g_bytes_hash( )和g_bytes_equal()。