Ошибка буфера вне диапазона в nodejs - PullRequest
0 голосов
/ 14 ноября 2018

Хорошо, поэтому я пытаюсь поместить очень длинную строку в буфер, но я получаю эту ошибку.

internal / buffer.js: 559 throw new ERR_OUT_OF_RANGE ('value', >= ${min} and <= ${max}, значение);^

RangeError [ERR_OUT_OF_RANGE]: значение «value» находится вне диапазона.Это должно быть> = 0 и <= 255. Получено 9605 </p>

Я не уверен, можно ли это исправить, но может ли кто-нибудь сказать мне, почему я получаю это и как это моглобыть исправленным?Спасибо!

Редактировать: Вот код, который помещает его в буфер.

build: function(params){
  var packetParts = [];
  var packetSize = 0;
  params.forEach(function(param){
    var buffer;
    console.log(param);
    if(typeof param === "string"){
      buffer = Buffer.from(param);
      buffer = Buffer.concat([buffer, zeroBuffer], param.length + zeroBuffer.length);
    }else if(typeof param === "number"){
      buffer = Buffer.alloc(2);
      buffer.writeUInt16LE(param, 0);
    }else{
      console.log("[CRITICAL] WARNING: Undefined DataType In Packet Builder");
    }
    packetParts.push(buffer);
    packetSize += buffer.length;
  });

  var dataBuffer = Buffer.concat(packetParts, packetSize);
  var sizeBuffer = Buffer.alloc(1);
  sizeBuffer.writeUInt8(dataBuffer.length + 1);

  finalBuffer = Buffer.concat([sizeBuffer, dataBuffer], sizeBuffer.length + dataBuffer.length);
  return finalBuffer;
}

1 Ответ

0 голосов
/ 14 ноября 2018

It must be >= 0 and <= 255. Received 9605 говорит мне, что вы пытаетесь записать в байт с десятичным числом 9605, что невозможно.

В вашем коде у вас есть sizeBuffer.writeUInt8(dataBuffer.length + 1);, что доказывает, что вы пытаетесь записать байт.

Но я не думаю, что вы понимаете, сколько данных может содержать байт.Смотрите: enter image description here

Как видите, 9605 слишком велико для uint8 / unsigned char [0-255].

Iможет предложить:

sizeBuffer.writeUInt16LE(dataBuffer.length + 1);

Поскольку unsigned short может вместить до 65535, что достаточно для вашей длины пакета 9605.

Это должно исправить ошибку, но вы также можете захотетьпроверить читателя на наличие короткого беззнакового байта вместо беззнакового байта ИЛИ Иначе ваш читатель также сломает .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...