Хотите знать, что означает эта функция encode_number
, все разные числа. В частности, я знаю, что 32768
предназначен для 16 бит (Math.pow(2, 16) / 2
), и что последний блок else
является (из комментариев исходного кода) 32-битным числом. Но я не понимаю, откуда эти цифры: 107, 139, 108, 1131, 247, 251, 28, 29
. Хотелось бы узнать, что означает эта функция. С здесь .
function encode_number(v) {
if (v >= -107 && v <= 107) {
return [v + 139]
} else if (v >= 108 && v <= 1131) {
v = v - 108
return [(v >> 8) + 247, v & 0xFF]
} else if (v >= -1131 && v <= -108) {
v = -v - 108
return [(v >> 8) + 251, v & 0xFF]
} else if (v >= -32768 && v <= 32767) {
// encode_number16
return [28, (v >> 8) & 0xFF, v & 0xFF]
} else {
// encode_number32
return [29, (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF]
}
}