繁体   English   中英

Java中哈希函数的十六进制字符串读取不起作用

[英]Hex String reading for hash function in java not working

我正在做一个项目,我在Java中有一个非常简单的哈希函数, 应该读取每个“数据”(按文件读取是字符串或Double类型的通用类型)字符,并对它们的值求和用作哈希码。 我以为我可以将每个字符转换为十六进制,然后“解码”或“ 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 hashcode方法,它将起作用。

提前致谢。

您需要告诉decode您正在使用十六进制。 给字符串加上0x前缀。

value = Integer.decode("0x"+"10038".substring(1));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM