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