Javascript将int值转换成八位字节流数组
我想将整数(有符号)转换为32位(大端)到八位字节流中,并将八位字节流作为数组值赋予缓冲区对象的构造函数。Javascript将int值转换成八位字节流数组
我可以在控制台创建例如用于值-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函数并抛出异常。
如何将一个32位整数值转换为八位字节数组流,而不使用writeInt32BE?
一个函数,它接受一个值并返回一个八位字节流数组。
使用一个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为访问底层数组缓冲性能 - 你可能能够调整代码适合你的应用程序。
当我打印它与getInt32(我)它导致RangeError:实际上我想转换-2000 –
底层缓冲区包含4个八位字节。 'view.getInt32(0)'将其值作为32位整数返回。将非零偏移量传递给getInt32将导致范围错误。测试代码中的'+ n'将字符串转换为数字,而不是将负数转换为正数。如预期的那样,-2000给出0xff 0xff 0xf8 0x30。 – traktor53
'缓冲区'是由Node提供的全局,而不是框架。所以你不应该用'(Buffer instance).writeInt32BE()'得到有效参数的异常。什么_exact_代码导致异常,它在Node中运行,框架是什么? – traktor53