比较Java中的两个hex字符串

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

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

69342c5c39e5ae5f0077aecc32c0f81811fb8193 

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

 0000000000000000000000000000000000000000 

小于:

 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 

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

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

提前致谢。

0..9A..F在ASCII字符集中以hex顺序排列,因此

 string1.compareTo(string2) 

应该做的伎俩。 除非我遗漏了什么。

 BigInteger one = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",16); BigInteger two = new BigInteger("0000000000000000000000000000000000000000",16); System.out.println(one.compareTo(two)); System.out.println(two.compareTo(one)); 

输出:
1
-1

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

由于hex字符按升序排列(如@Tenner所示),您可以直接比较字符串:

 String hash1 = ...; String hash2 = ...; int comparisonResult = hash1.compareTo(hash2); if (comparisonResult < 0) { // hash1 is less } else if (comparisonResult > 0) { // hash1 is greater } else { // comparisonResult == 0: hash1 compares equal to hash2 } 

由于字符串是固定长度和’0′<'1'<... <'A'<... <'Z',您可以使用compareTo 。 如果使用混合大小写hex数字,请使用compareToIgnoreCase