繁体   English   中英

Node.js:无法通过“ buf.writeIntBE()”设置值“ 0xff”

[英]Node.js: Cannot set a value '0xff' by 'buf.writeIntBE()'

我可以通过writeIntBE-1 写入缓冲区,代码是:

var b = new Buffer(1);
b.writeIntBE(-1, 0, 1);
console.log(b);
//<Buffer ff>

但是,以下代码不起作用

var b = new Buffer(1);
b.writeIntBE(0xff, 0, 1);
console.log(b);

错误代码为:

buffer.js:794
    throw new TypeError('value is out of bounds');
    ^

TypeError: value is out of bounds
    at checkInt (buffer.js:794:11)
    at Buffer.writeIntBE (buffer.js:919:5)
    at Object.<anonymous> (/home/liuzeya/http/examples/buffer.js:2:3)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:475:10)
    at startup (node.js:117:18)
    at node.js:951:3

请帮助我理解区别。

可以通过检查以下来源来解决此问题:

https://github.com/nodejs/node/blob/0a329d2d1f6bce2410d65ecd47175b5a4e1c1c91/lib/buffer.js

我们可以看到对checkInt的调用:

checkInt(this,
         value,
         offset,
         byteLength,
         Math.pow(2, 8 * byteLength - 1) - 1,
         -Math.pow(2, 8 * byteLength - 1));

计算Math.pow的值,我们看到最小值是-128,最大值是127。如果在控制台中单独评估0xff ,我们看到的是正数 255,超出范围。

因此十六进制常数始终为正。 我相信您可以在JavaScript标准中找到它。 而您使用的是电话的签名版本。 您可以在JavaScript中使用显式的十六进制负值,在我看来,这看起来有些奇怪,但是在这种情况下为-0x1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM