我想以较短的形式表示长值(例如 System.currentTimeInMillis() )。 我想我可以在这里使用位操作,但我被困住了。我不太擅长位操作。
如果 long 值为 1388534400000,我如何将其表示为字符串,但长度较短?
基本上我想编写两种方法,一种用于编码,一种用于解码。因此,给定一个缩短的值,我希望能够将其转换回原始的长值,反之亦然。
--------更新------------
我的问题非常模糊,对于造成的困惑我深表歉意。这是我的另一次尝试,以更好地解释我想要实现的目标。 (我也会尝试简化我的问题。我们不要考虑节省空间或保留到数据库)。
假设我有一个长值,它是以毫秒为单位的时间戳,例如 1388534400123,它是包含其他固定长度数值的较长字符串的一部分,例如(为了简单起见)999913885344001238888。在这种情况下,我填充了9999 和 8888。 现在我将其作为字符串,但我需要一个更短的表示形式,不会丢失任何原始数据(例如,我想要 9999、1388534400123 和 8888)。由于这些都是数字,我隐约认为我可以使用位来缩短表示形式。有什么办法吗?
最佳答案
如果我理解正确的话,你想要一个包含很长信息但比十进制格式的实际数字短的字符串。我建议您使用更高的基数来表示您的数字,例如十六进制。
您的号码 (1388534400000) 长度为 13 位。
十六进制为:1434B198400,长度为 11 位。
使用字母表中的所有字母(以 36 为基数),则为:HPVTJ400,长度为 8 位。
减少字符串中数字大小的另一种方法是确定您只想看到一些相关数字并使用科学记数法:
假设您只关心 6 位有效数字,那么您的数字将是:
1.38853E12,长度为 10 个字符,但比 36 进制数字更容易阅读。
关于java - 如何使用java中的位操作来缩短长值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643797/