我正在与另一个使用C语言的团队合作。我们之间通信的协议会发送一个IP地址,以byte[]格式表示,并且还有两个"掩码"值,它们是byte[8]。我想将这个IP地址作为BigInteger来使用,以便可以进行比较,看看一个IP地址是否在另外两个IP地址之间。为了确保符号不会影响我的结果,我需要一种方法将IP从byte[](IPv4为4字节,IPv6为16字节)转换为BigInteger中的正值。请问是否有相关的参考资料或者建议如何实现?
Java提供了一个BigInteger构造函数,它接受一个有符号整数和一个字节数组。因此,您可以这样做:
BigInteger ip = new BigInteger(1, ipBytes);
可以在此处查看文档: BigInteger(int, byte[])
正如其他人指出的那样,BigInteger构造函数应该没问题。值得注意的一点是JVM是大端序,因此请确保传入的字节数组也是大端序的。如果你从套接字中获取字节,则不需要做任何事情,因为网络字节顺序也是大端序的,但如果你在x86硬件上运行并通过其他方式获取数据,则可能会有问题。
BigInteger.toByteArray()
返回一个包括符号在内的字节数组,可以在BigInteger(byte[])
构造器中使用。http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html#toByteArray() - Richard Campbell