如何在 java 中将字节值视为 int

How to treat the byte value as int in java

我正在尝试手动计算字符串的哈希码,因为它表示字符串哈希码的公式为“ s[0]*31^(n-1) + s[1]*31^(n-2 ) + ... + s[n-1]", 如下

    public static void main(String[] args) {

        String str1 = new String("A");

        double hc = 0;
        for (int i = 0; i < str1.length(); i++) {
            int iv = (byte) str1.charAt(i);
            hc = hc + Math.pow((iv * 31), (str1.length() - 1 - i));
        }

        System.out.println(hc);              // 1.0
        System.out.println(str1.hashCode()); // 65
    }

'hc' 的值为 1.0,因为 java 按照规则将 byte 转换为 int 值。 但我正在寻找的答案是 65。 如何将字节值原样复制到 int 变量。

所以到目前为止,我看到你在功能上犯了错误我的意思是:

Math.pow((iv * 31), (str1.length() - 1 - i)) 

等于 => (65 * 31)^(1[str.lenght] - 1 - 0[i 值])

what gives something like (65*31) ^ 0 what gives 1 但你正在寻找表达式 65 * (31 ^ 0) [结论] 所以函数应该看起来像

Math.pow((31), (str1.length() - 1 - i)) * iv 

我猜要给 65