加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何创建表示Java的字符串,就像它是无符号的64位值一样

发布时间:2020-12-15 04:50:26 所属栏目:Java 来源:网络整理
导读:我的组件被传递了一个很长的值,我后来将其用作缓存中的密钥.密钥本身是长值的字符串表示,就好像它是无符号的64位值.也就是说,当我的组件被交给-2944827264075010823L时,我需要将其转换为字符串键“15501916809634540793”. 我有一个解决方案,但它似乎蛮力,它
我的组件被传递了一个很长的值,我后来将其用作缓存中的密钥.密钥本身是长值的字符串表示,就好像它是无符号的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;

必须有一种更优雅的方式来做到这一点.有什么建议?

解决方法

这是我的实施.我重构它有一个函数需要很长时间并返回一个字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读