- 浏览: 310880 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
面试遇到过一个问题,怎样用字符串怎样用HASH码保存?查了一些资料,做了一个实验,是这样的。
#include<stdio.h> unsigned int ELFHash( char * str) ; void print_bin(unsigned int n) ; void print_bin2(unsigned int n) ; int main(char* arg[]){ char * str = "12345678" ; printf("String:%s",str) ; unsigned int te = ELFHash(str) ; printf("\n%s'hash code:",str) ; print_bin(te) ; return 0 ; } unsigned int ELFHash( char * str) { //定义无符号整数,在进行位运算时无需考虑符号位的影响,左移和右移均补位0;int 为32位 ,即 00000000 00000000 00000000 00000000 unsigned int hash = 0 ; unsigned int x = 0 ; while ( * str) { printf("\ns1:") ; print_bin(hash) ; hash = (hash << 4 ) + ( * str ++ ); //hash值左移4位加上一个字符.例,如果hash为2时,(hash << 4)操作后,放大16(2的4次方)倍;然后加上(*str++),(*str++)为8位的字符,所以对4-7为有影响,其后四位添到hash左移空出的四位。 printf("\ns2:") ; print_bin(hash) ; if ((x = hash & 0xF0000000L ) != 0 )//判断hash值的高4位是否不为0,因为不为0时需要下面特殊处理,否则上面一步的左移4位会把这高四位给移走,造成信息丢失 { /*0xF0000000L表示28-31位这4位是1,后28为均为0的长整型(L),该操作的结果为x保存hash 的高4位 & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0*/ hash ^= (x >> 24 ); //把刚才的高4位跟hash的低5-8位异或 printf("\ns3:") ; print_bin(hash) ; /*hash ^= (x >> 24); 首先x的拷贝进行右移23位的操作,然后与hash进行异或操作。 右移后X的值为 00000000 00000000 00000000 ****0000 ;****为hash的高四位 ^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1*/ hash &= ~ x; //把高4位清0 /*hash &= ~x; 有 if ((x = hash & 0xF0000000L) != 0),x保存着hash的高四位, 虽然进行右移操作,但不会改变x的值,而是对副本进行操作。经过hash &= ~x; hash的高四位被清空。*/ printf("\ns4:") ; print_bin(hash) ; } } return (hash & 0x7FFFFFFF ); //希望hash值是一个非负数 //返回一个符号位为0的数,即丢弃最高位,以免函数外产生影响。(我们可以考虑,如果只有字符,符号位不可能为负) } void print_bin(unsigned int n){ if(n < 2 ){printf("%d",n);} else{ print_bin(n/2) ; printf("%d",n%2) ; } }
结果:
注:字符1的ASCII码为:0x31 .
发表评论
-
vs2008【断点无效】解决方法
2015-04-13 10:05 796有时候,我们在用vs2008调试的时候,会出现断点无效。如下 ... -
C++模板之特化与偏特化详解
2015-01-07 14:44 844转自:http://www.jb51.net/a ... -
c++中的typename与class<转>
2015-01-07 08:51 834在泛型编程的形参表中,关键字typename和class具有 ... -
traits:Traits技术初探
2015-01-06 12:49 811概述:traits是一种特性萃取技术,它在Generic ... -
POD型别
2015-01-06 12:37 776POD全称Plain Old Data。通俗的讲,一个类或结 ... -
c++核心基础知识(内存管理)
2015-01-04 22:22 713内存管理是C++最令人切 ... -
内存分配器<转>
2015-01-04 22:07 1396题记:内存管理一直 ... -
operator new在C++中的各种写法
2015-01-04 19:27 1224http://blog.sina.com.cn/s/blo ... -
可变参数va_list
2014-12-26 17:45 8881.要在函数中使用参数,首先要包含头文件<stdarg ... -
Apriori算法
2014-12-15 12:56 676http://blog.csdn.net/lizhengn ... -
map注意的两个问题
2014-12-11 14:21 649代码1 void main() { ... -
关于C++ const 的全面总结<转>
2014-11-14 12:56 767C++中的const关键字的用法非常灵活,而使用const ... -
C++DLL编程详解
2014-10-08 19:44 1671DLL(Dynamic Link Library)的 ... -
C++&&QT调试时出现的一些错误
2014-10-08 15:14 798错误 原因 解决 ... -
【转】C++ function、bind以及lamda表达式
2014-09-11 09:42 890本文是C++0x系列的第四篇,主要是内容是C++0x中新增 ... -
STL函数对象及函数对象适配器【转】
2014-09-10 09:24 500一 函数对象Functor STL中提供了一元和 ... -
typedef和typename关键字[转]
2014-09-10 09:21 6971、类型说明typedef 类型说明的格式为: type ... -
C/C++中extern关键字详解[转]
2014-09-09 11:38 5131 基本解释:extern可以置于变量或者函数前,以标示变量 ... -
MYSQL在C—API 中可用的函数
2014-08-24 23:03 612mysql_affected_rows() 返 ... -
编辑距离算法
2014-08-14 00:02 985字符串编辑距离: 是一种字符串之间相似度计算的方法。给定两个 ...
相关推荐
elfhash elfhash是用于操纵ELF文件的哈希表的实用程序。 #特征: 0,体系结构独立,这意味着您可以在x86 / x86_64平台上处理32位ARM ELF。 1,将ELF中的GNU样式哈希表转换为sysV样式。 2,重新构建sysv哈希表,如果...
哈希值计算工具,如标题所示的"Hash Calculator",是一种用于验证数据完整性和一致性的实用程序。在信息技术领域,哈希(Hash)是通过特定算法将任意长度的数据转化为固定长度输出的过程。这个过程通常不可逆,即从...
本文将基于“hash函数 c语言”的主题,深入探讨几种常见的哈希算法及其C语言实现,包括RSHash、JSHash、P.J.Weinberger Hash(PJWHash)、SDBMHash、ELFHash、BKDRHash、DJBHash以及APHash,这些函数旨在将任意长度...
ELF-Hash Function Value: " + ghl.ELFHash(key)); System.out.println(" 5. BKDR-Hash Function Value: " + ghl.BKDRHash(key)); System.out.println(" 6. SDBM-Hash Function Value: " + ghl.SDBMHash(key)); ...
ELF Hash是为适应ELF(Executable and Linkable Format)文件格式而设计的,它结合了左移和异或操作。每次迭代,哈希值左移4位后加上当前字符,如果哈希值的最高4位非零,就进行异或和与操作来避免高位溢出。 6. *...
描述中提到了一些常见的哈希函数,如BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash和ELFHash,并且给出了这些函数在特定测试场景下的得分情况。这些测试场景包括了随机字符串、有意义的英文句子...
在上述测试中,BKDRHash和APHash在平衡性能和易用性方面表现出色,而PJWHash和ELFHash则因为类似的设计和较差的表现被相对忽视。 哈希函数的评估通常通过碰撞计数来完成,比如在测试数据中统计不同哈希值的冲突次数...
接下来我们将介绍几种典型的哈希函数构造方法,包括SDBMHash、RSHash、JSHash、PJWHash、ELFHash、BKDRHash、DJBHash和APHash等。这些函数都具有良好的性能特点,可以作为学习和实践的参考。 ##### 1. SDBMHash ``...
unsigned int ELFHash (char* str, unsigned int len); unsigned int BKDRHash(char* str, unsigned int len); unsigned int SDBMHash(char* str, unsigned int len); unsigned int DJBHash (char* str, unsigned ...
本文将深入探讨几种常用的哈希函数,包括SDBMHash、RSHash、JSHash、PJWHash、ELFHash、BKDRHash、DJBHash以及APHash,并分析它们的工作原理及特点。 ### SDBMHash SDBMHash是一种基于字符串的哈希函数,其计算...
1.程序设计(Programming)是给出解决特定问题程序的过程,是软件构造活动... static unsigned int ELFHash(char *str); /* ELF Hash Function */ static unsigned int BKDRHash(char *str); /* BKDR Hash Function */
Hash函数集合,包含主流的hash函数: nginx_hash算法,OpenSSL_hash算法,RSHash,JSHash,PJWHash,ELFHash,BKDRHash,DJBHash,DEKHash,APHash等等!
`ELFHash`函数通过左移4位、与字符相加,然后对高4位进行异或和位移操作,以此来混合哈希值。这个算法在处理英文字符时效果较好,但对于其他语言可能表现一般。 5. **BKDR哈希(Bernstein哈希)** BKDR哈希是由D. ...
--ELF Hash --MST --后缀数组(倍增实现) --手工vector类 --线段树的几个模板 数学相关 --高斯消元(用double ,c++实现) --高斯消元(用bigInteger和分数类 ,Java实现) //thanks to love8909 --矩阵运算 --欧拉函数 ...
SDBMHash则使用了移位和加法运算,而ELFHash和FNV_hash同样使用了移位和异或运算,但在具体的实现上有所区别。 这些哈希函数的一个常见应用是哈希表。哈希表是一种通过哈希函数计算数据存储位置的数据结构,它能够...
这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数。 //elfhash.h #include unsigned long ELFhash(const char* key); //elfhash.c #inclu
对于非数字关键字,如字符串,常常使用字符串哈希函数,例如BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash、ELFHash等。 总的来说,哈希表是一种在静态查找表中提高查找效率的重要工具,其性能...