java 中哈希函数的十六进制字符串读取不起作用
Hex String reading for hash function in java not working
我正在做一个项目,我在 java 中有一个非常简单的散列函数,应该 读取每个 "data"(这是一个通用类型这是文件读取的 String 或 Double 类型)字符,并将它们的值相加,用作哈希码。
我以为我可以将每个字符转换为十六进制,然后 "decode" 或 "parseInt" 获得的字符串,但它不起作用,我不明白为什么。
这是我的方法:
public long HashFunction(T data){
String bytes = data.toString();
int value=0;
for (int i=0; i<bytes.length(); i++)
value = value + Integer.decode(Integer.toHexString( bytes.charAt(i) | 0x100000).substring(1));
return (value%1583)%(size);
//1583 prime number not near to the power of 2, size is the size of the array of my hashtable
}
这是我的错误,0038 应该是“8”:
Exception in thread "main" java.lang.NumberFormatException: For input string: "0038"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at java.lang.Integer.decode(Unknown Source)
at dizionario_package.HashTable.HashFunction(HashTable.java:22)
at dizionario_package.HashTable.HashInsert(HashTable.java:29)
at dizionario_package.RecordReader.CreateHTFromFile(RecordReader.java:24)
at dizionario_package.proviamo.main(proviamo.java:8)
此外,我确定错误出在这个函数中,因为如果我使用 java 哈希码方法,它就可以工作。
提前致谢。
您需要告诉 decode
您正在使用十六进制。在字符串前加上 0x
。
value = Integer.decode("0x"+"10038".substring(1));
我正在做一个项目,我在 java 中有一个非常简单的散列函数,应该 读取每个 "data"(这是一个通用类型这是文件读取的 String 或 Double 类型)字符,并将它们的值相加,用作哈希码。 我以为我可以将每个字符转换为十六进制,然后 "decode" 或 "parseInt" 获得的字符串,但它不起作用,我不明白为什么。
这是我的方法:
public long HashFunction(T data){
String bytes = data.toString();
int value=0;
for (int i=0; i<bytes.length(); i++)
value = value + Integer.decode(Integer.toHexString( bytes.charAt(i) | 0x100000).substring(1));
return (value%1583)%(size);
//1583 prime number not near to the power of 2, size is the size of the array of my hashtable
}
这是我的错误,0038 应该是“8”:
Exception in thread "main" java.lang.NumberFormatException: For input string: "0038"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at java.lang.Integer.decode(Unknown Source)
at dizionario_package.HashTable.HashFunction(HashTable.java:22)
at dizionario_package.HashTable.HashInsert(HashTable.java:29)
at dizionario_package.RecordReader.CreateHTFromFile(RecordReader.java:24)
at dizionario_package.proviamo.main(proviamo.java:8)
此外,我确定错误出在这个函数中,因为如果我使用 java 哈希码方法,它就可以工作。
提前致谢。
您需要告诉 decode
您正在使用十六进制。在字符串前加上 0x
。
value = Integer.decode("0x"+"10038".substring(1));