首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 转 双字节

在JavaScript中,将字符串转换为双字节(通常指的是UTF - 16下的双字节表示,JavaScript内部字符串采用UTF - 16编码)可以通过查看字符的码点(code point)来实现。

一、基础概念

  1. UTF - 16编码
    • 在UTF - 16编码中,基本多语言平面(BMP)内的字符用一个16位(双字节)的代码单元表示。例如,英文字母 'a' 的码点是97(十六进制为61),在UTF - 16下就是一个双字节值(在JavaScript中可以直接用charCodeAt方法获取单个字符的码点)。
    • 对于超出BMP的字符(表示Unicode中较高的码点),会使用代理对(surrogate pair),这是两个16位的代码单元组合表示一个字符。
  • 码点(code point)
    • 是Unicode字符集中的一个数值,用于唯一标识一个字符。例如,汉字 '中' 的码点是20013(十六进制为4E2D)。

二、相关类型(这里主要是从字符编码角度)

  1. 单字节字符(在ASCII范围内)
    • 对于ASCII码中的字符(0 - 127),在UTF - 16下也占用双字节空间,但实际有效信息只有一个字节。例如,字符 'A' 的ASCII码是65,在UTF - 16下存储为0x0041。
  • 双字节字符(BMP内非ASCII字符)
    • 像汉字、日文假名等很多亚洲字符在UTF - 16下就是单纯的双字节表示。如前面提到的 '中' 字。

三、应用场景

  1. 国际化应用
    • 在处理多语言文本时,了解字符的双字节表示有助于正确显示和处理不同语言的字符。例如,在一个支持中日文切换的网页应用中,正确处理双字节字符的显示和交互逻辑是很重要的。
  • 二进制数据交互(与后端或其他系统交互时)
    • 如果需要将包含双字节字符的数据以特定格式(如二进制格式)发送给后端服务器或者从后端接收这样的数据并进行正确解析,就需要对双字节表示有清晰的认识。

四、示例代码(将字符串中的每个字符转换为双字节表示的十六进制形式)

代码语言:txt
复制
function stringToDoubleByteHex(str) {
    let result = '';
    for (let i = 0; i < str.length; i++) {
        let code = str.charCodeAt(i).toString(16);
        // 确保每个码点表示为双字节(不足前面补0)
        if (code.length < 2) {
            code = '0' + code;
        }
        result += code + ' ';
    }
    return result.trim();
}

// 示例用法
let testStr = "Hello中";
console.log(stringToDoubleByteHex(testStr));

在这个示例中:

  • 对于输入字符串 "Hello中",函数会遍历每个字符。
  • 对于英文字母 'H'、'e'、'l'、'l'、'o',它们的码点分别是72(48)、101(65)、108(6C)、108(6C)、111(6F),转换为双字节十六进制形式就是48、65、6C、6C、6F。
  • 对于汉字 '中',码点是20013(4E2D)。
  • 最终输出结果为 "48 65 6C 6C 6F 4E2D"。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 单片机多字节串口接收(转)

    感觉串口多字节接收部分的逻辑相对于配置寄存器跟串口回复来说,是有点难度的——寄存器配置基本上都是死的,串口回复多字节跟回复一字节只是多了一个循环。   ...一般都是有帧头(2~3个字节吧),数据(长度根据需要),结束位(1位,有时候设计成校验字节,最简单的校验也就是前面所有数据求和)。   ...这次的通信协议如下,串口波特率19200,2个帧头aa 55 ,一个板选,6字节数据,一个校验字节(除帧头外其他数据的和)。   ...拿前面的4个字节的协议为例。   ...每次都循环一下,这延时太长,通信速度太快的话就不能接收到下一字节数据了。最要命的是这个时间的长度是随着通信协议帧的字节数增加而增加的,如果一次要接收几十个字节,肯定就玩完了。

    1.9K50

    NLP 转后端开发,顺利拿到字节实习 offer!!

    简单介绍一下我的基本情况,上海双非本 + 985 硕,目前在读研二。本科 + 研究生大部分时间都在搞算法, NLP 相关,今年终于认识到了理想和现实的差距,遂在 5 月份下定决心转后端开发。...面试过的公司包括:B 站,蔚来,百度以及字节,B 站挂在二面,其他均拿到日常实习的 Offer,最终选择了字节跳动。 从以上我的基本情况大家能看出,我的战线比较短。...字节跳动 在我整个的面试过程中,字节给我的体验是最好的。...字节二面(1h): 字节二面的经历比较魔幻了, 面试官在伦敦有时差,因此是晚上九点开始面试的,由于面试官比较忙,整个面试过程比较简单,自我介绍 + 项目介绍之后简单提问了几个问题(没有印象深刻的技术问题...最终功夫不负有心人,我收获了百度、蔚来以及字节的日常实习 offer。

    59830

    JS生成字节码生成技术,用字节码保护商业NodeJS源码!

    实现原理 nodejs的内核中对于js的解析,使用的是谷歌的v8引擎。v8引擎内置有js虚拟机。通过v8虚拟机,可以将js代码编译为字节码。而v8虚拟机是能够识别和直接运行该字节码的。...因此,以下执行逻辑成为可能: 1、js代码 -> js字节码 2、js字节码 -> nodejs ->运行 实现代码 (例程) 生成字节码文件的部分: var v8 = require('v8...(); //生成字节码 var script = new vm.Script(js_code, {produceCachedData: true}); var byte_code = script.cachedData...,读取、运行字节码。...对于JS代码产品的保护,除了可以使用字节码技术,还可以用代码混淆加密的办法,比如:JShaman(http://www.jshaman.com/)是一款对JS代码进行混淆加密的工具,也适用于nodejs

    3.4K00
    领券