Node.js中Buffer.from(tag_name, "hex")和toString("hex")写法的区别
Node.js中两种Buffer.from写法的逻辑差异
核心区别
二者是方向完全相反的编码转换流程:
- 前者是把普通字符串按UTF-8编码转成二进制Buffer,再把Buffer内容序列化为十六进制字符串
- 后者是把输入字符串直接当作十六进制编码内容,解码为对应的二进制Buffer
逐行拆解测试代码逻辑
测试用例中输入的tag_name = "79"是普通UTF-8字符串,两个写法的执行流程分别如下:
1. Buffer.from(tag_name).toString("hex") 执行步骤
- 调用
Buffer.from(tag_name)时,未指定第二个编码参数,默认按UTF-8编码把输入字符串转成二进制Buffer:- 字符
'7'的UTF-8编码值为十六进制0x37 - 字符
'9'的UTF-8编码值为十六进制0x39 - 得到的中间Buffer为
<Buffer 37 39>
- 字符
- 调用
.toString("hex")会把Buffer的每个字节转换为2位十六进制字符串拼接,最终得到结果"3739",也就是输出的tag_s。
2. Buffer.from(tag_name, "hex") 执行步骤
调用时指定了第二个参数"hex",含义是把输入的字符串当作十六进制编码的内容,解码为二进制Buffer:
- 输入的字符串
"79"会被识别为两位十六进制数值,转换为十进制是121 - 对应二进制值的Buffer为
<Buffer 79>,该值正好是UTF-8编码中小写字母'y'的编码,所以直接输出这个Buffer会显示为y,也就是拿到的tag_ss。
快速记忆区分
- 加
"hex"作为Buffer.from的第二个参数:输入是十六进制字符串,要转成原始二进制Buffer - 调用
.toString("hex"):输入是原始二进制Buffer,要转成十六进制格式的字符串
内容的提问来源于stack exchange,提问作者Maged
相关产品推荐
相关产品推荐

