Javascript将int值转换为octet stream Array

时间:2016-04-24 21:17:37

标签: javascript node.js int modbus

我希望将一个整数(带符号)转换为32位(大端)转换为八位字节流,并将八位字节流作为数组值提供给一个构造函数 缓冲对象。

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

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

值-3000例如是-3000:0xff,0xff,0xf4,0x48

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

如何在没有writeInt32BE的情况下将32位整数值转换为八位字节数组流?

获取值并返回八位字节流数组的函数。

1 个答案:

答案 0 :(得分:1)

使用4字节数组缓冲区,转换为数据视图并在视图上调用setInt32似乎可行。这种方法支持小端序和大端(默认)格式的规范,与机器架构无关。

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));

文档位于搜索“MDN ArrayBuffer”“MDN Dataview”等。详细检查DataView访问底层数组缓冲区的属性 - 您可以调整代码以适应您的应用程序。 / p>