【发布时间】:2019-09-11 08:31:42
【问题描述】:
我需要在 javascript 中将字符串的长度转换为长度为 2(16 位有符号整数)的字节数组,相当于 C# Bitconverter.GetBytes(short value)。
示例:295 -> [1,39]。
【问题讨论】:
-
[1,39] 是什么意思?它甚至不是UTF8。我假设你的意思是它是 UTF16BE。即使长度为 1 的 Javascript 字符串也不一定包含 1 个完整的 Unicode 字符。如果它包含一个 unicode 代理,它不是一个字符,而只是一个 16 位代码单元,它不能转换为 UTF16BE(它应该首先与第二个代理配对,以便在 UTF16BE 中转换为 4 个字节和 4 个不同的字节在 UTF8 中)。在 Javascript 中,字符串不限于 UTF16,它们是 16 位代码单元的任意向量,并不总是可以转换为任何 UTF 没有例外或替换。
-
[ value >> 8 & 0xFF, value & 0xFF ];返回数字的低 2 个字节。 -
@Thomas 你是对的,但是因为有方法可以做到这一点,
Buffer严格来说是一个字节数组(这是他要求的),最好使用库函数。 -
@EuanSmith 你的回答没有给出我想要的结果。 (295 >> 8 & 0xFF, 295 & 0xFF) -> [1,39] const buf = Buffer.alloc(2); buf.writeUInt16BE(295, 0);控制台.log(buf); 。我认为 Thomas 的答案正是我想要的。
标签: javascript node.js bitconverter