Javascript将int值转换为八进制流数组

Javascript将int值转换为八进制流数组,javascript,node.js,int,modbus,Javascript,Node.js,Int,Modbus,我想将一个整数(有符号)转换成32位(big-endian)的八位字节流,并将八位字节流作为数组值提供给 缓冲区对象 我可以在控制台中创建它,例如值-2000: <code> buf = Buffer(4) buf.writeInt32BE(-2000) buf // is <Buffer ff ff f8 30> buf1 = new Buffer([0xff, 0xff, 0xf8, 0x30]) </code> buf=缓冲区(4) buf.写入32

我想将一个整数(有符号)转换成32位(big-endian)的八位字节流,并将八位字节流作为数组值提供给 缓冲区对象

我可以在控制台中创建它,例如值-2000:

<code>
buf = Buffer(4)
buf.writeInt32BE(-2000)
buf // is <Buffer ff ff f8 30>
buf1 = new Buffer([0xff, 0xff, 0xf8, 0x30])
</code>

buf=缓冲区(4)
buf.写入32BE(-2000)
buf//is
buf1=新缓冲区([0xff,0xff,0xf8,0x30])
值-3000例如是-3000:0xff、0xff、0xf4、0x48

但我使用的框架不接受writeInt32BE函数,并抛出异常

如何在没有writeInt32BE的情况下将带符号的32位整数值转换为八位数组流


一个函数,它接受一个值并返回一个八位字节流数组。

使用一个4字节数组缓冲区,转换为数据视图,并在视图上调用setInt32,似乎可以工作。这种方法支持独立于机器体系结构的little-endian和big-endian(默认)格式的规范

function bigEnd32( value) {
    var buf = new ArrayBuffer(4);
    var view = new DataView(buf);
    view.setInt32( 0, value);
    return view;
}

// quick test (in a browser)
var n = prompt("Signed 32: ");
var view = bigEnd32( +n);
for(var i =  0 ; i < 4; ++i)
    console.log(view.getUint8( i));
函数bigEnd32(值){
var buf=新阵列缓冲(4);
var视图=新数据视图(buf);
view.setInt32(0,值);
返回视图;
}
//快速测试(在浏览器中)
var n=提示(“有符号的32”);
变量视图=bigEnd32(+n);
对于(变量i=0;i<4;++i)
console.log(view.getUint8(i));

搜索“MDN ArrayBuffer”“MDN Dataview”等时找到文档。请详细查看访问底层数组缓冲区的属性-您可以调整代码以适合您的应用程序。

当我使用getInt32(i)打印它时,它会导致RangeError:实际上我想要转换-2000底层缓冲区包含4个八位字节
view.getInt32(0)
将其值作为32位整数返回。将非零偏移量传递给getInt32将导致范围错误<测试代码中的code>+n将字符串转换为数字,而不是将负数转换为正数-2000按预期给出0xff 0xff 0xf8 0x30。
缓冲区
是由节点而不是框架提供的全局缓冲区。因此,您不应该得到带有有效参数的
(缓冲区实例).writeInt32BE()
的异常。到底是什么代码导致了异常,它是否在节点中运行,框架是什么?