比较Java中的两个十六进制字符串

tre*_*ker 6 java string hash hex sha1

我正在使用Java中的Chord协议实现一个简单的DHT.细节并不重要,但我坚持的是我需要哈希字符串,然后看一个哈希字符串是否"小于"另一个.

我有一些使用SHA1计算哈希值的代码,它返回一个40位长的十六进制字符串(Java中的String类型),例如:

69342c5c39e5ae5f0077aecc32c0f81811fb8193
Run Code Online (Sandbox Code Playgroud)

但是,我需要能够比较其中两个,以便告诉我,例如:

0000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

小于:

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

这是完整的值范围,因为40位数字符串实际上代表0123456789ABCDEF范围内的40个十六进制数字

有谁知道如何做到这一点?

提前致谢.

Jam*_*nen 13

0..9A..F是在ASCII字符集的十六进制数字的顺序,那么

string1.compareTo(string2)
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.除非我错过了什么.

  • 只要字符串总是长度和长度相同. (3认同)

Ada*_*dam 6

BigInteger one = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",16);
BigInteger two = new BigInteger("0000000000000000000000000000000000000000",16);
System.out.println(one.compareTo(two));
System.out.println(two.compareTo(one));
Run Code Online (Sandbox Code Playgroud)

输出:
1
-1

1表示大于-1表示小于0表示相等的值