Я пытаюсь вычислить NodeId в соответствии с BEP42
Я не достаточно умен, чтобы понять пример кода, приведенный в BEP42. Однако приведен алгоритм создания nodeId.as: crc32c ((ip & 0x030f3fff) | (r << 29)) </em>
Существует также таблица результатов, из которой видно, что хороший идентификатор узла для IP-адреса21.75.31.124 начинался бы с 5a3ce9, если бы использовалось случайное начальное число '86' (я полагаю, в десятичном виде).
Поэтому я пробую следующее:
InetSocketAddress a = new InetSocketAddress("21.75.31.124",6881);
byte[] ba = a.getAddress().getAddress();
int ia = ByteBuffer.wrap(ba).order(ByteOrder.BIG_ENDIAN).getInt();
int r = 86;
int calc = (ia & 0x030f3fff) | (r<<29);
Crc32C crc = new Crc32C();
crc.update(calc);
int foo = crc.getIntValue();
byte[] ret = ByteBuffer.allocate(4).putInt(foo).array();
String retStr = Hex.encodeHexString(ret);
System.out.println("should be : 5a3ce9 is " + retStr);
Но я получаю6ea6c88c, что неправильно почти во всех отношениях.8472 имеет некоторый код, используемый для определения, является ли идентификатор узла клиента BEP42-совместимым, но я тоже не понимаю этот код.
Может кто-нибудь сказать мне, что не так с кодом выше?