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

如何将任意JavaScript变量转换为Uint8Array用于WebSocket传输?

实现任意JavaScript变量转Uint8Array用于WebSocket发送

需求背景

需要将字符串、整数或任意类型的JavaScript变量转换为符合服务器预期的Uint8Array,通过WebSocket发送。现有代码仅能分别处理字符串和整数,需扩展为通用处理逻辑,且无法修改服务器端逻辑。

实现思路

针对不同类型的变量做针对性编码:

  • 字符串:直接用原生TextEncoder转UTF-8编码的Uint8Array
  • 整数:按照示例要求转为单字节无符号整数(对应0x7B即十进制123的情况),超出Uint8范围的整数取低8位兼容
  • 其他类型(布尔、对象等):转为JSON字符串后再编码,确保服务器可解析

完整代码

function send(bar) {
    let uint8Arr;
    // 处理字符串类型
    if (typeof bar === 'string') {
        uint8Arr = new TextEncoder('utf-8').encode(bar);
    }
    // 处理整数类型(转为单字节无符号整数)
    else if (typeof bar === 'number' && Number.isInteger(bar)) {
        // 取低8位确保输出单字节,适配示例的123→0x7B格式
        uint8Arr = new Uint8Array([bar & 0xFF]);
    }
    // 处理其他类型:转为JSON字符串后编码
    else {
        const serialized = JSON.stringify(bar);
        uint8Arr = new TextEncoder('utf-8').encode(serialized);
    }
    // 替换为你的WebSocket实例发送逻辑
    // yourWebSocket.send(uint8Arr);
    return uint8Arr; // 测试用返回值
}

测试验证

  • 调用send('Hello'),得到的Uint8Array为[0x48, 0x65, 0x6C, 0x6C, 0x6F],符合预期
  • 调用send(123),得到的Uint8Array为[0x7B],符合预期

扩展说明

如果需要支持更多特殊类型(如ArrayBuffer、Blob),可以新增类型判断分支,直接转换或序列化后编码,核心逻辑是保证输出的Uint8Array符合服务器的解析规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:35:36