javascript - if block 中具有不同数值的此数字函数的含义

标签 javascript numbers byte

想知道这个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]
  }
}

最佳答案

嗯,这很简单:

因此,此函数用于为属于 OpenType 的“紧凑字体格式”编码某些内容。但这实际上意味着是什么我不知道;)

关于javascript - if block 中具有不同数值的此数字函数的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54213047/

相关文章:

c# - 如何在 C# 中将十六进制字符串转换为字节?

javascript - TreeView 正在被包裹

javascript - 如何根据 angularJs 中的用户输入过滤数组

javascript - 如何使用 JavaScript 打印 5000 个随机 URL

c - c中的位屏蔽和分离

ruby - 在 Ruby 中定义求和函数

javascript - 发布 http ://localhost:3000/404 (Not Found)

php - 测试一个范围是否与另一个数字范围相交

java - 对 : RandomAccessFile. readFully(byte[] b) 感到困惑

java - 在 Java 中与字节相互转换