Как я могу преобразовать байт [] в ПОЗИТИВНЫЙ BigInteger в Java? - PullRequest
6 голосов
/ 21 июля 2011

Я работаю с другой командой, которая работает в C. Протокол, с которым мы общаемся, отправляет IP-адрес в формате byte [], а также 2 значения «mask», которые являются байтами [8].Я хотел бы использовать IP-адрес в качестве BigInteger, чтобы я мог сделать сравнения, чтобы увидеть, если IP-адрес находится между 2 другими IP-адресами.Чтобы гарантировать, что подпись не облажает меня, мне нужен способ конвертировать IP из байта [] (4 байта для IPv4 или 16 байтов для IPv6) в положительное значение в BigInteger.Может ли кто-нибудь указать мне ссылку или предложить метод достижения этой цели?

Ответы [ 3 ]

13 голосов
/ 21 июля 2011

Java имеет конструктор BigInteger, который принимает целое число знака и байтовый массив. Так что вы могли бы сделать:

BigInteger ip = new BigInteger(1, ipBytes);

Смотрите документы здесь: BigInteger (int, byte [])

11 голосов
/ 21 июля 2011

Просто используйте конструктор , который принимает массив байтов и параметр, чтобы сказать, является ли он положительным или отрицательным.

2 голосов
/ 21 июля 2011

Как уже отмечали другие, конструктор BigInteger должен быть в порядке. Стоит отметить, что JVM имеет большой порядок байтов, поэтому просто убедитесь, что передаваемый вами байтовый массив тоже. Вам не нужно ничего делать, если вы получаете байты из сокета, так как порядок байтов в сети также является прямым порядком байтов, но это может быть проблемой, если вы работаете на маленькой машине с прямым порядком байтов, такой как аппаратное обеспечение x86, и получаете данные через некоторые другие средства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...