我希望将一个整数(带符号)转换为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位整数值转换为八位字节数组流?
获取值并返回八位字节流数组的函数。
答案 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>