Как сохранить целое число в буфере nodejs?

Buffer nodejs довольно набухает. Однако, похоже, он предназначен для хранения строк. Конструкторы либо берут строку, массив байтов, либо размер байтов для выделения.

Я использую версию 0.4.12 из Node.js, и я хочу сохранить целое число в буфере. Не integer.toString(), а фактические байты целого числа. Есть ли простой способ сделать это, не зацикливая на целое число и не сделав бит-twiddling? Я мог бы это сделать, но я чувствую, что это проблема, с которой кто-то еще должен был столкнуться.

Ответ 1

Поскольку он не был встроен в 0.4.12, вы можете использовать что-то вроде этого:

var integer = 1000;
var length = Math.ceil((Math.log(integer)/Math.log(2))/8); // How much byte to store integer in the buffer
var buffer = new Buffer(length);
var arr = []; // Use to create the binary representation of the integer

while (integer > 0) {
    var temp = integer % 2;
    arr.push(temp);
    integer = Math.floor(integer/2);
}

console.log(arr);

var counter = 0;
var total = 0;

for (var i = 0,j = arr.length; i < j; i++) {
   if (counter % 8 == 0 && counter > 0) { // Do we have a byte full ?
       buffer[length - 1] = total;
       total = 0;
       counter = 0;
       length--;      
   }

   if (arr[i] == 1) { // bit is set
      total += Math.pow(2, counter);
   }
   counter++;
}

buffer[0] = total;

console.log(buffer);


/* OUTPUT :

racar $ node test_node2.js 
[ 0, 0, 0, 1, 0, 1, 1, 1, 1, 1 ]
<Buffer 03 e8>

*/