好的,我试图将一个很长的字符串放入缓冲区,但是我一直收到此错误。
internal / buffer.js:559 抛出新的ERR_OUT_OF_RANGE('value',
>= ${min} and <= ${max}
,value); ^RangeError [ERR_OUT_OF_RANGE]:“值”的值超出范围。 必须为> = 0和<=255。已收到9605
我不确定它是否可以解决,但是是否可以告诉我为什么我要解决这个问题以及如何解决?谢谢!
编辑:这是将其放入缓冲区的代码。
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;
}
答案 0 :(得分:0)
It must be >= 0 and <= 255. Received 9605
告诉我,您正在尝试写入无法使用十进制9605的字节。
在您的代码上,您有sizeBuffer.writeUInt8(dataBuffer.length + 1);
,这证明您正在尝试写一个字节。
如您所见,对于9605
/ uint8
[0-255],unsigned char
太大。
我建议:
sizeBuffer.writeUInt16LE(dataBuffer.length + 1);
因为unsigned short
最多可以容纳65535,对于您的9605
数据包长度来说足够大。
这应该可以纠正错误,但是您可能还需要检查阅读器以读取无符号的短整数而不是无符号的字节。否则,阅读器也会损坏。