У меня есть устройство, которое сканирует приложение. Сканирование выполняется по последовательному шестнадцатеричному значению. Я в настоящее время цикл по диапазонам следующим образом:Как перебрать диапазон в порядке уменьшения шестнадцатеричной мощности
for (int i = 0; i < 0xFF00 - 0x0100; i++) {
SCAN_ADDRESSES[i] = i + 0x0100;
}
сканов занять много времени, и я обнаружил, что наиболее интересные результаты в даже шестнадцатеричных значениях, так что я хотел бы, чтобы сканировать их первыми. В моем примере желаемый набор начнется с наиболее значимых и круглых шестнадцатеричных значений в диапазоне.
{
0xE000, 0xD000, 0xC000, 0xB000, 0xA000, 0x9000, 0x8000, 0x7000, 0x6000, 0x5000, 0x4000, 0x3000, 0x2000, 0x1000,
0xFE00, 0xFD00, 0xFC00, 0xFB00, 0xFA00, 0xF900, 0xF800, 0xF700, 0xF600, 0xF500, 0xF400, 0xF300, 0xF200, 0xF100,
⋮
0x010F, 0x010E, 0x010C, 0x010B, 0x010A, 0x0109, 0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101
}
Требуемый диапазон содержит все числа, где n
0x0100 <= n < 0xFF00
мне все равно, каждый мощность повторяется в декременте или приращении порядка, до тех пор, как полномочия самого декремент порядка. Я тоже не хочу дубликатов.
Я ожидаю, что будет какая-то простая петля, которая сделает это. В противном случае может быть даже рекурсивная функция, которая будет делать то, что я хочу. Заранее благодарим за помощь и предложения. Я использую guava, если что-нибудь в этом может помочь мне.
Вы можете сгенерировать эти индексы с двумя вложенными циклами, один для ранга, ака «количество нулей в наименее значимых позициях», а другой для самых значащих цифр. –