我的组件被传递了一个长值,我稍后将其用作缓存中的键。密钥本身是 long 值的字符串表示形式,就好像它是无符号的 64 位值一样。也就是说,当我的组件被交给-2944827264075010823L时,我需要将其转换为字符串键“15501916809634540793”。
我有一个解决方案,但它似乎是蛮力的,它让我有点反胃。本质上,我将 long 转换为十六进制字符串表示形式(因此 -2944827264075010823L 变为“d721df34a7ec6cf9”)并将十六进制字符串转换为 BigInteger:
String longValueAsHexString = convertLongToHexString(longValue);
BigInteger bi = new BigInteger(longValueAsHexString, 16);
String longValueString = bi.toString();
然后我使用 longValueString 作为进入缓存的键。
我不能使用 Long.toString(longValue,16),因为它返回绝对值的十六进制字符串,前缀为“-”。
所以我的 convertLongToHexString 看起来像这样:
long mask = 0x00000000ffffffffL;
long bottomHalf = number & mask;
long upperHalf = (number >> 32) & mask;
String bottomHalfString = Long.toString(bottomHalf, 16);
if (bottomHalfString.length() != 8) {
String zeroes = "0000000000000000";
bottomHalfString = zeroes.substring(16-bottomHalfString.length()) + bottomHalfString;
}
return Long.toString(upperHalf,16)+bottomHalfString;
必须有一种更优雅的方式来做到这一点。有什么建议么?