В качестве продолжения сохраните 2 4-битных числа в 1 8-битное число, мне интересно, есть ли для него обобщение, в котором вы можете хранить n x-битных чисел в m y-битных числах. Например, возможно, вы можете сохранить 5 8-битных чисел в 3 15-битных числах. Или, может быть, 2 8-битных числа в 1 16-битном числе или 3 16-битных числа в 2 32-битных числах. Интересно, какой будет реализация для кодирования и декодирования для процедуры, которая это сделала, или если это невозможно.
Что-то типа:
function encode(i, s1, n, s2) {
// i = array of input bytes
// s1 = size of input bytes
// n = number of output bytes
// s2 = size of output bytes
}
function decode(i, s1, n, s2) {
}
Основываясь на приведенном ниже ответе, я попытался перевести его на JavaScript, но не понимаю, что на самом деле означает, и не думаю, что это работает.
function encode(input, inputSize, outputSize, callback) {
var buffer = 0
var bbits = 0
var mask = (1 << outputSize) - 1
while (bbits < outputSize) {
buffer |= (input << bbits)
bbits += inputSize
}
while (bbits >= outputSize) {
callback(buffer & mask)
buffer >>= outputSize
bbits -= outputSize
}
}