You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

代码说明

  1. charCodeAt(i):获取字符串第i个位置的UTF-16代码单元值(范围0~65535),对应UCS-2编码的16位字符值。
  2. 高/低字节拆分:
    • codeUnit >> 8:右移8位得到高8位数值
    • codeUnit & 0xFF:与0xFF按位与得到低8位数值
  3. padStart(2, '0'):确保每个字节的十六进制表示为两位(如数值0会转为00,避免出现单字符的十六进制片段)。
  4. 大端格式拼接:高字节在前、低字节在后,符合PDU短信要求的UCS-2(UTF-16BE)编码规范。

与原Node.js代码的等价性验证

原Node.js代码先将字符串转成UTF-16LE字节流,再逐个将16位小端值转为大端值;本实现直接生成大端格式的十六进制字符串,最终输出结果完全一致,可无缝替代原代码用于PDU短信编码场景。

内容的提问来源于stack exchange,提问作者nestarz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:25:15