0

我正在尝试使用 String 类的内置 hash() 方法创建一个具有哈希 url 的十六进制版本的绝对值名称的目录。现在 hash() 可能会产生否定结果,并且以减号开头的目录名称有点难以处理,这就是我需要绝对值的原因。但是,我无法弄清楚如何获取散列 url 字符串的十六进制版本的绝对值。

4

2 回答 2

4

十六进制值永远不会有负号!它只是值的二进制补码位模式的十六进制表示。

System.out.println(Integer.toHexString(-1)); // ffffffff
System.out.println(Integer.toHexString(Integer.MIN_VALUE)); // 80000000

就像你妈妈总是告诉你的那样:“你本来就是完美的”:

String dirname = Integer.toHexString(dirname.hashCode()); // never has minus sign
于 2014-04-12T03:53:50.883 回答
0

将其强制为一个长的,屏蔽掉前 32 位,然后将其转换为字符串。

 long longHash = intHash;
 long nonNegativeLongHash = longHash & ((1L << 32) - 1);
 String unsignedHex = Long.toHexString(nonNegativeLongHash);
于 2014-04-12T03:56:01.343 回答