我正在尝试使用glib来构建哈希表,键将是一些二进制字符串。
我无法使用内置函数g_str_hash ()
,因为它是C字符串(空终止)。不能使用内置函数g_direct_hash ()
,因为它只需要一个指针。无法指定密钥的长度,这也是我无法提供自己的哈希函数版本的原因(因为它将采用两个参数:指向密钥和长度的指针来生成密钥hash,什么是对函数指针类型GHashFunc)。
有什么想法吗?
答案 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中的键。
如果您的数据是固定宽度并且额外的内存困扰您,您可以编写自己的GHashFunc和GEqualFunc作为薄包装器,暂时将您的数据放入GBytes结构中以便使用g_bytes_hash( )和g_bytes_equal()。