1
hao
2025-03-27 e610e1c17f62b423a717fadaaa7b139d02857793
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const Mode = require('./mode')
 
function NumericData (data) {
  this.mode = Mode.NUMERIC
  this.data = data.toString()
}
 
NumericData.getBitsLength = function getBitsLength (length) {
  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)
}
 
NumericData.prototype.getLength = function getLength () {
  return this.data.length
}
 
NumericData.prototype.getBitsLength = function getBitsLength () {
  return NumericData.getBitsLength(this.data.length)
}
 
NumericData.prototype.write = function write (bitBuffer) {
  let i, group, value
 
  // The input data string is divided into groups of three digits,
  // and each group is converted to its 10-bit binary equivalent.
  for (i = 0; i + 3 <= this.data.length; i += 3) {
    group = this.data.substr(i, 3)
    value = parseInt(group, 10)
 
    bitBuffer.put(value, 10)
  }
 
  // If the number of input digits is not an exact multiple of three,
  // the final one or two digits are converted to 4 or 7 bits respectively.
  const remainingNum = this.data.length - i
  if (remainingNum > 0) {
    group = this.data.substr(i)
    value = parseInt(group, 10)
 
    bitBuffer.put(value, remainingNum * 3 + 1)
  }
}
 
module.exports = NumericData