将 javascript 字符串长度转换为 byte[] 数组

Convert javascript string length to array of byte[]

我需要在 javascript 中将字符串的长度转换为长度为 2(16 位带符号整数)的字节数组,相当于 C# Bitconverter.GetBytes(短值)。

示例:295 -> [1,39].

当您使用节点时,Buffer 就是您所需要的。查看文档 here。例如:

//Make a string of length 295
const st="-foo-".repeat(59);
//Create a byte array of length 2
const buf = Buffer.alloc(2);
//Write the string length as a 16-bit big-endian number into the byte array
buf.writeUInt16BE(st.length, 0);
console.log(buf);
//<Buffer 01 27> which is [1, 39]

请注意,这将为您提供以字符为单位的字符串长度,而不是字符串的字节长度 - 两者可能相同,但不能保证。

最后,一个javascript字符串的内容最终可能会大于64KB或更大,所以它转换为字节后的字符串长度可能不适合16位整数或2个字节。最小代码应首先检查字符串长度(如果 st.length>=32768 则抛出错误),然后使用 2 字节缓冲区(来自 Buffer.alloc(2)),然后将字符串长度输出到缓冲区 buffer.writeUInt16BE(st.length).

编写无法处理正确字符串内容的代码通常不是一个好主意:具有 32768 个或更多字符的文本一点也不例外。但如果文本来自具有长度限制的数据库字段,则可能是正确的,如果文本来自 HTML 输入表单字段中的用户输入,则可能是正确的,这将首先需要验证(即使该表单使用 VALID UTF -8,验证器仍应检查:不要假设 "user" 正在使用浏览器,它可能是恶意机器人试图破坏您的 webapp 以获取安全漏洞并获得一些特权或窃取私人数据。

在网络上,在所有处理之前,所有输入字段(包括组合选择器和单选按钮或复选框)都需要对提交的表单数据进行输入验证(有效编码、长度限制、文本格式)(但您可能希望丢弃所有名称不正确的未知字段)。确保您的处理可以处理通过 webapp 验证器的所有文本长度(包括使用嵌入式 web 组件的独立应用程序,如移动应用程序或桌面应用程序,而不仅仅是 web 浏览器)。

恕我直言,使用这样的 16 位假设是不好的,但是如果您确保之前已经检查了验证器和已实现的以及长度约束,那么您的问题是有效的。