如何用Web API将JS基础字符串转为UCS-2编码HEX字符串?
将JavaScript字符串转换为UCS-2(UTF-16BE)十六进制字符串(浏览器/Deno版)
核心实现思路
JavaScript字符串本身采用UTF-16编码存储,因此可以直接通过charCodeAt()获取每个字符的16位代码单元值,再将每个值转换为大端(BE)格式的两位字节十六进制表示,最终拼接成目标字符串。该逻辑与你提供的Node.js代码完全等价,且无需依赖Node.js的Buffer API,可直接在浏览器或Deno中运行。
实现代码
function convertToUCS2Hex(str) { let hexStr = ''; for (let i = 0; i < str.length; i++) { // 获取当前UTF-16代码单元的十进制值 const codeUnit = str.charCodeAt(i); // 拆分高8位与低8位,转换为两位十六进制(补前导0) const highByte = (codeUnit >> 8).toString(16).padStart(2, '0'); const lowByte = (codeUnit & 0xFF).toString(16).padStart(2, '0'); // 拼接大端格式的十六进制片段 hexStr += highByte + lowByte; } return hexStr; } // 测试示例 const message = "hello world 😃"; const hex = convertToUCS2Hex(message); console.log(hex); // 输出:00680065006c006c006f00200077006f0072006c0064d83dde03
代码说明
charCodeAt(i):获取字符串第i个位置的UTF-16代码单元值(范围0~65535),对应UCS-2编码的16位字符值。- 高/低字节拆分:
codeUnit >> 8:右移8位得到高8位数值codeUnit & 0xFF:与0xFF按位与得到低8位数值
padStart(2, '0'):确保每个字节的十六进制表示为两位(如数值0会转为00,避免出现单字符的十六进制片段)。- 大端格式拼接:高字节在前、低字节在后,符合PDU短信要求的UCS-2(UTF-16BE)编码规范。
与原Node.js代码的等价性验证
原Node.js代码先将字符串转成UTF-16LE字节流,再逐个将16位小端值转为大端值;本实现直接生成大端格式的十六进制字符串,最终输出结果完全一致,可无缝替代原代码用于PDU短信编码场景。
内容的提问来源于stack exchange,提问作者nestarz
相关产品推荐
相关产品推荐

