Хорошо, у меня есть следующая проблема: у меня есть набор из 8 (без знака) чисел, все из которых являются 17-битными (иначе ни один из них не больше, чем 131071).Поскольку работа с 17-битными номерами раздражает (держать их в 32-битном int - пустая трата места), я хотел бы превратить их в 17-битные числа, например, так:
Если у меня есть эти8 17-разрядных целых чисел:
[25409, 23885, 24721, 23159, 25409, 23885, 24721, 23159]
Я бы превратил их в базовое представление 2L
["00110001101000001", "00101110101001101", "00110000010010001", "00101101001110111", "00110001101000001", "00101110101001101", "00110000010010001", "00101101001110111"]
Затем соединил бы это в одну большую строку:
"0011000110100000100101110101001101001100000100100010010110100111011100110001101000001001011101010011010011000001001000100101101001110111"
Затем разделите его на 17 строк, каждая из которых содержит 8 символов:
["00110001", "10100000", "10010111", "01010011", "01001100", "00010010", "00100101", "10100111", "01110011", "00011010", "00001001", "01110101", "00110100", "11000001", "00100010", "01011010", "01110111"]
И, наконец, преобразуйте двоичные представления обратно в целые числа
[49, 160, 151, 83, 76, 18, 37, 167, 115, 26, 9, 117, 52, 193, 34, 90, 119]
Этот метод работает, но он не очень эффективенЯ ищу что-то более эффективное, чем это, предпочтительно кодируется в C ++, так как это язык, с которым я работаю.Я просто не могу придумать, как сделать это более эффективным, и с 17-разрядными числами работать не совсем просто (с 16-разрядными числами было бы гораздо приятнее работать).
Заранее спасибо, xfbs