我需要在javascript中将字符串的长度转换为长度为2(16位有符号整数)的等效于C#Bitconverter.GetBytes(short value)的字节数组。
例如:295-> [1,39]。
答案 0 :(得分:0)
在使用节点时,您需要一个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]
请注意,这将为您提供以字符为单位的字符串长度,而不是字符串的字节长度-两者可能相同,但这不能保证。
答案 1 :(得分:0)
最后,JavaScript字符串的内容最终可能会大于64KB或更大,因此转换为字节后的字符串长度可能不适合16位整数或2个字节。最小代码应首先检查字符串长度(如果st.length>=32768
则引发错误),然后使用2字节缓冲区(来自Buffer.alloc(2)
),然后将带有{{1}的字符串长度输出到缓冲区}。
制作无法处理正确字符串内容的代码通常是一个坏主意:32768个字符或更多的文本完全不是例外。但是,如果文本来自具有长度限制的数据库字段,那可能是正确的,而不是文本来自HTML输入表单字段中的用户输入,这首先需要验证(即使该表单使用的是VALID UTF-8,验证程序仍应检查:不要以为“用户”正在使用浏览器,这可能是一个恶意机器人,试图破坏您的Web应用程序以收获安全漏洞并获得某些特权或窃取私有数据。
在网络上,在进行所有处理之前,所有输入字段(包括组合选择器和单选按钮或复选框)都需要来自提交的表单数据的输入验证(有效的编码,长度限制,文本格式),但是您可能要舍弃所有名称不正确的未知字段)。确保您的处理能够处理所有通过Web应用程序验证程序的文本长度(包括使用嵌入式Web组件的自包含应用程序,例如移动应用程序或台式机应用程序,而不仅仅是Web浏览器)。
恕我直言,使用这样的16位假设很不好,但是如果您确保之前已经检查过验证器,实现和长度约束,那么您的问题就是有效的。