想知道这个encode_number
函数是什么意思,所有不同的数字。具体来说,我知道 32768
是 16 位 (Math.pow(2, 16)/2
),最后一个 else
block 是(来自源代码注释)一个 32 位数字。但我不明白这些数字是从哪里来的:107、139、108、1131、247、251、28、29
。想知道这个函数是什么意思。来自 here .
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]
}
}
最佳答案
嗯,这很简单:
- 通过使用该链接源代码的
blame
View ,您会遇到 commit that introduced these lines .提交消息是:“添加 CFF 表编码。” - 通过搜索 CFF 和 107,您可以找到关于 CFF dictionary format 的解释
因此,此函数用于为属于 OpenType 的“紧凑字体格式”编码某些内容。但这实际上意味着是什么我不知道;)
关于javascript - if block 中具有不同数值的此数字函数的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54213047/