📅  最后修改于: 2023-12-03 15:17:54.121000             🧑  作者: Mango
在 Node.js 中,Buffer 类型是用于处理二进制数据的类。其中,writeUInt16LE()
方法可以将一个 16 位无符号整数值(0 - 65535)以小端字节序写入到 Buffer 实例的指定位置。
buffer.writeUInt16LE(value, offset[, noAssert])
value
:一个 16 位无符号整数值。offset
:整数类型,指定在 Buffer 实例的哪个偏移量开始写入数据。noAssert
:一个可选参数,在默认情况下,写入数据时会进行数据范围检查。如果将此参数设置为 true
,则表示不进行检查,可以提高 write 速度。返回一个 Number
类型的无符号整数。
const buf = Buffer.alloc(4);
buf.writeUInt16LE(0x0201, 0);
console.log(buf);
// 输出:<Buffer 01 02 00 00>
buf.writeUInt16LE(0x0403, 2);
console.log(buf);
// 输出:<Buffer 01 02 03 04>
在上面的代码中,首先使用 Buffer.alloc(4)
创建了一个长度为 4 的 Buffer 实例,并将其赋值给变量 buf
。然后,使用 buf.writeUInt16LE(0x0201, 0)
将十六进制数 0x0201
(等同于 513)以小端字节序写入到 buf
中的前两个字节中。由于是小端字节序,所以写入时需要先写入低位字节 0x01
,再写入高位字节 0x02
。最后,使用 console.log()
将 buf
中的值输出到控制台中,可以看到输出的结果是 <Buffer 01 02 00 00>
。
接着,使用 buf.writeUInt16LE(0x0403, 2)
将十六进制数 0x0403
(等同于 1027)以小端字节序写入到 buf
中的第 3 和第 4 个字节中。与上面类似,写入时需要先写入低位字节 0x03
,再写入高位字节 0x04
。最后,再次使用 console.log()
将 buf
中的值输出到控制台中,可以看到输出的结果是 <Buffer 01 02 03 04>
。
writeUInt16LE()
写入数据时,需要注意写入的数据长度不要超过 Buffer 实例的总长度,否则会抛出 ”RangeError: Index out of range“ 的错误。writeUInt16LE()
写入数据时,需要注意写入的数据不能超过 16 位非负整数的范围,否则会抛出 ”RangeError: value out of range“ 的错误。noAssert
参数,并且写入的数据超出了 16 位非负整数的范围,则会将无符号整数的值对 2^16 取模。例如,写入的数据为 -1
,则会被取模为 0xFFFF
。